有没有办法根据值使用R将行转换为列

时间:2015-12-04 09:28:29

标签: r

我有数据加载到数据框中

unitid  date_time       sensor  sample
b0a25   10/1/2015 5:34  1       0
b0a25   10/1/2015 5:34  3       0
b0a25   10/1/2015 5:34  6       22
b0a25   10/1/2015 5:34  7       35
b0a25   10/1/2015 5:35  1       0
b0a25   10/1/2015 5:35  3       0
b0a25   10/1/2015 5:35  6       22
b0a25   10/1/2015 5:35  7       35
b0a25   10/1/2015 5:36  1       0
b0a25   10/1/2015 5:36  3       0
b0a25   10/1/2015 5:36  6       37
b0a25   10/1/2015 5:36  7       56

我尝试使用mutate()函数将数据保存在单独的列中

df<- group_by(data1, unitid) %>% 
arrange(datee_time) %>% 
mutate(sensor1 = lag(sensor,1), sensor3 = lag(sensor,3),sensor6 = lag(sensor,6),sensor7 = lag(sensor,7))%>% 
group_by(unitid, sample_time_conv)

我出去了

unitid  date_time       sensor  sample  sensor1 sensor3 sensor7 sensor9
b0a25   10/1/2015 5:34  1       0       7       3       6       3
b0a25   10/1/2015 5:34  3       0       1       6       7       6
b0a25   10/1/2015 5:34  6       22      3       7       1       7
b0a25   10/1/2015 5:34  7       35      6       1       3       1

等等。这是不正确的。

预期输出应为

unitid  date_time       sensor1 sensor3 sensor6 sensor7
b0a25   10/1/2015 5:34  0       0       22      35
b0a25   10/1/2015 5:35  0       0       22      35
b0a25   10/1/2015 5:36  0       0       37      56

先谢谢。

2 个答案:

答案 0 :(得分:0)

这可以通过tidyr

中的扩散函数来完成
df %>% mutate(sensor=paste("sensor",sensor)) %>% spread(sensor,sample)

答案 1 :(得分:0)

这可以使用reshape()完成,如下面的解决方案

samplereshape<-reshape(data1,v.names="sample",idvar="date_time",timevar="sensor",direction="wide")

使用colnames重命名列。