我有一个这样的数据框:
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
请协助,谢谢!
答案 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)