R中的数据扩展和同时NA下降

时间:2018-06-21 09:14:28

标签: r dplyr tidyr

我需要在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

感谢您的帮助!

1 个答案:

答案 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