R中的数据传播和同时NA下降?



我需要在 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,所以我希望将它们放在我们的放置中。我在dplyrtidyr中尝试了不同的功能(例如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

最新更新