以寬格式轉換數據,同時保留變量的對齊方式

我在R中創建了以下數據幀

df<-data.frame("ID"= c("A", "A", "A", "A", "B", "B", "B"))
df$X_F= c(1,5,6, 7, 1, 7, 8)
df$X_A= c(1,5,6, 7, 1, 7, 8)

上面的數據幀是長格式的

  ID X_F X_A
1  A   1   1
2  A   5   5
3  A   6   6
4  A   7   7
5  B   1   1
6  B   7   7
7  B   8   8

我想把數據幀轉換成寬格式。我為同一個應用程序導入了重塑庫和數據表庫

library(DT)
library(reshape2)
library(data.table)

現在我已經運行了以下代碼

df2<-dcast(melt(setDT(df), id.var = "ID"), rowid(ID, variable) ~ 
                 paste(ID, variable, sep="__"))[, ID := NULL][]

這將產生以下數據幀

     A__X_A A__X_F B__X_A B__X_F
       1      1      1      1
       5      5      7      7
       6      6      8      8
       7      7     NA     NA

如何獲得以下數據幀

     A__X_A A__X_F B__X_A B__X_F
      1      1      1      1
      5      5      NA     NA
      6      6      NA     NA
      7      7       7      7
      NA     NA      8      8

如何獲得此結果。我請人看看

? 最佳回答:

dplyr/tidyr替代解決方案:

df<-data.frame("ID"= c("A", "A", "A", "A", "B", "B", "B"))
df$X_F= c(1,5,6, 7, 1, 7, 8)
df$X_A= c(1,5,6, 7, 1, 7, 8)


library(dplyr)
library(tidyr)

df %>% 
  pivot_longer(cols = -ID) %>% 
  mutate(newID = value) %>% 
  pivot_wider(id_cols = newID, names_from = c(ID, name), values_from = value, values_fn = {first}) %>% 
  select(-newID)

Returns:

  A_X_F A_X_A B_X_F B_X_A
  <dbl> <dbl> <dbl> <dbl>
1     1     1     1     1
2     5     5    NA    NA
3     6     6    NA    NA
4     7     7     7     7
5    NA    NA     8     8
主站蜘蛛池模板: 无码乱人伦一区二区亚洲| 亚洲.国产.欧美一区二区三区 | 日韩在线一区视频| 国产亚洲综合一区二区三区| 无码少妇一区二区浪潮av| 清纯唯美经典一区二区| 自拍日韩亚洲一区在线| 中文字幕精品亚洲无线码一区应用| 久久伊人精品一区二区三区 | 中文字幕一区一区三区| 夜夜精品无码一区二区三区| 亚洲一区二区三区深夜天堂| 中文字幕精品一区| 一区二区三区四区电影视频在线观看 | 亚洲国产精品综合一区在线| 一区二区免费在线观看| 国产未成女一区二区三区| 久久久91精品国产一区二区| 东京热无码一区二区三区av| 另类ts人妖一区二区三区| 亚洲熟妇成人精品一区| 亚洲日韩中文字幕无码一区| 97se色综合一区二区二区| 亚洲一区二区三区高清视频| 无码少妇精品一区二区免费动态| 在线精品亚洲一区二区小说| 无码少妇一区二区三区浪潮AV| 国产一区二区在线看| 色偷偷一区二区无码视频| 天堂va在线高清一区| 精品视频在线观看一区二区三区| 精品国产一区二区三区久久狼 | 午夜福利无码一区二区| 无码日韩AV一区二区三区| 亚洲av成人一区二区三区在线观看 | 久久福利一区二区| 麻豆AV无码精品一区二区 | 国产精品区一区二区三在线播放| 无码日韩AV一区二区三区| 国产精品一区二区电影| 久久福利一区二区|