我需要在 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
感谢您的帮助!
你试过吗:
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