在合并数据时将列转换为行

时间:2017-10-10 15:30:24

标签: r dataframe

我有一个这样的数据框:

feature_id  mouse_number  value
P1001       1             8.55
P1001       2             6.50
P1001       3             2.48
P1001       4             9.01
P1002       1             4.41
P1002       2             4.91
P1002       3             5.86
P1002       4             1.89
...

我希望数据读取如下:

mouse_number   P1001    P1002   ...
1              8.55     4.41
2              6.50     4.91
3              2.48     5.86
4              9.01     1.89

请协助,谢谢!

3 个答案:

答案 0 :(得分:1)

df <- read.table(text="feature_id  mouse_number  value
P1001       1             8.55
           P1001       2             6.50
           P1001       3             2.48
           P1001       4             9.01
           P1002       1             4.41
           P1002       2             4.91
           P1002       3             5.86
           P1002       4             1.89",stringsAsFactors=F,header=T)

library(tidyr)
df %>% spread(feature_id,value)
# mouse_number P1001 P1002
# 1            1  8.55  4.41
# 2            2  6.50  4.91
# 3            3  2.48  5.86
# 4            4  9.01  1.89

答案 1 :(得分:1)

您也可以使用reshape2包。

library(reshape2)

dt2 <- dcast(dt, mouse_number ~ feature_id, value.var = "value")
dt2
  mouse_number P1001 P1002
1            1  8.55  4.41
2            2  6.50  4.91
3            3  2.48  5.86
4            4  9.01  1.89

数据

dt <- read.table(text = "feature_id  mouse_number  value
P1001       1             8.55
                 P1001       2             6.50
                 P1001       3             2.48
                 P1001       4             9.01
                 P1002       1             4.41
                 P1002       2             4.91
                 P1002       3             5.86
                 P1002       4             1.89",
                 header = TRUE, stringsAsFactors = FALSE)

答案 2 :(得分:1)

另一个选项是来自dcast

data.table
library(data.table)
dcast(setDT(dt), mouse_number~feature_id)
#   mouse_number P1001 P1002
#1:            1  8.55  4.41
#2:            2  6.50  4.91
#3:            3  2.48  5.86
#4:            4  9.01  1.89

如果观察次数相同,则可以使用xtabs中的base R

xtabs(value~ mouse_number + feature_id, dt)