任何人都可以帮助复制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
答案 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)