我需要在R中重塑数据框的形状,并且找不到描述我需要的重塑类型的解决方案的帖子。我的数据框如下所示:
# Sample data frame.
time <- c(1:8)
aoi <- c("a", "b", "c", NA, "a", "c", NA, "b")
df <- data.frame(time, aoi)
time aoi
1 a
2 b
3 c
4 <NA>
5 a
6 c
7 <NA>
8 b
我想将aoi
列中的每个值都设为一个单独的列,这样,如果存在该特定值,则行将接收到1,否则返回0。重要的是,数据帧中有NA,因此我希望将它们放到我们的输出中。我在dplyr
和tidyr
中尝试了不同的功能(例如spread(aoi, -time)
),但是我不能使用0和1来进行替换,而且在删除NA和编写0S时也遇到了困难。在其他列中的位置。你会怎么做?这是我的目标输出应如下所示:
time a b c
1 1 0 0
2 0 1 0
3 0 0 1
4 0 0 0
5 1 0 0
6 0 0 1
7 0 0 0
8 0 1 0
感谢您的帮助!
答案 0 :(得分:0)
您尝试过吗:
df1 <- spread(df,aoi,-time)
data.frame(time=d1$time
,a=as.integer(!is.na(df1$a))
,b=as.integer(!is.na(df1$b))
,c=as.integer(!is.na(df1$c)))
# time a b c
#1 1 1 0 0
#2 2 0 1 0
#3 3 0 0 1
#4 4 0 0 0
#5 5 1 0 0
#6 6 0 0 1
#7 7 0 0 0
#8 8 0 1 0