在一行中复制具有不同值的行

时间:2018-10-04 04:01:22

标签: r

任何人都可以帮助复制R中的行:

我有一个数据集-

ID Study X Y Z Time
1  2     3 4 5 0
2  2     3 4 5 0
3  2     3 4 5 0

还具有时间向量c(1,1.3,4,5,8,24,34,55,66)

我想用上面列出的值在列Time的新行中复制每一行,例如:

ID Study X Y Z Time
1  2     3 4 5 0
1  2     3 4 5 1
1  2     3 4 5 1.3
1  2     3 4 5 4

2 个答案:

答案 0 :(得分:1)

这样做的一种方法:

数据:

dt <- read.table(text=c("ID Study X Y Z Time",
  "1  2     3 4 5 0",
  "2  2     3 4 5 0",
  "3  2     3 4 5 0"), header=T)

解决方案:

vect <- list(c(0,1,1.3,4,5,8,24,34,55,66)) #convert the vector to a list
dt$Time <- vect #use that converted list to add as column, it will replace the existing Time column
dt <- tidyr::unnest(dt, Time) #use tidyr::unnest to unnest the column time

或@thelatemail建议,您可以像这样使用baseR(使用Base R中的默认矢量化):

newdt <- dt[rep(seq_len(nrow(dt)), each=length(vect)),]
newdt$Time <- vect #We can see the vectorization of values in R here

我在这里有两个假设,现有的Time变量完全为零,并且您希望顶部的每个ID的时间值为零。

输出

   #   ID Study X Y Z Time
   # 1   1     2 3 4 5  0.0
   # 2   1     2 3 4 5  1.0
   # 3   1     2 3 4 5  1.3
   # 4   1     2 3 4 5  4.0
   # 5   1     2 3 4 5  5.0

答案 1 :(得分:0)

如果我正确理解了您的问题,则您想使用给定的向量修改从第二次观察开始的时间值。您可以简单地使用以下表达式,只是要注意长度以防止意外回收:

df$Time[-1] <- time_vec # alternatively: df$Time[2:n] <- time_vec where n = 10 in this case

数据:

df <- data.frame(
  ID = 1:10,
  Study = rep(2, 10),
  X = rep(3, 10),
  Y = rep(4, 10),
  Z = rep(5, 10),
  Time = rep(0, 10)
)

time_vec <- c(1, 1.3, 4, 5, 8, 24, 34, 55, 66)