如何解决基于从一列到新的行的行重新打印所有其他值
我对使用 R 还很陌生,但我想知道是否有一种方法可以创建代码来将列中每两行的第一行重新打印到新列中。例如,我有一个这样的数据框:
Name V1 V2
User1 a time1
User1 a time2
User1 b time3
User1 b time4
User2 c time5
User2 c time6
我的数据框基本上被 V1 划分,每个值有两行。那么V2每一行对应的时间都不一样。我想创建一个新列(V3),它只有两次中的第一次,而另一列(V4)只有两次中的第二次。我希望它看起来像这样:
Name V1 V2 V3 V4
User1 a time1 time1 time2
User1 a time2 time1 time2
User1 b time3 time3 time4
User1 b time4 time3 time4
User2 c time5 time5 time6
User2 c time6 time5 time6
谢谢!
解决方法
这个怎么样?
基本思想是使用 seq(...,by = 2)
获取每隔一行。然后使用 rep(...,each = 2)
复制目标行中的值。
dat <- data.frame(
name = c("user1","user1","user2","user2"),v1 = c("a","a","b","c","c"),v2 = c("time1","time2","time3","time4","time5","time6"))
dat$v3 <- rep(dat[seq(from = 1,to = nrow(dat),by = 2),"v2"],each = 2)
dat$v4 <- rep(dat[seq(from = 2,each = 2)
dat
#> name v1 v2 v3 v4
#> 1 user1 a time1 time1 time2
#> 2 user1 a time2 time1 time2
#> 3 user1 b time3 time3 time4
#> 4 user1 b time4 time3 time4
#> 5 user2 c time5 time5 time6
#> 6 user2 c time6 time5 time6