如何调用列表(R)中数据帧中的多个单元格?
我正在努力研究如何在列表中建立索引。我的数据(作为data.frames的列表)与此类似:如何调用列表(R)中数据帧中的多个单元格?,r,list,indexing,dplyr,R,List,Indexing,Dplyr,我正在努力研究如何在列表中建立索引。我的数据(作为data.frames的列表)与此类似: x <- data.frame(c(1,2,3,4,5), c(4.2,6.5,9.6, 9.3, 8.1)); names(x) <- c("Time", "Value") y <- data.frame(c(1,2,3,4,5), c(8.5, 3.7, 5.4, 4.7, 9.2)); names(y) <- c("Time", "Value") dat <- list
x <- data.frame(c(1,2,3,4,5), c(4.2,6.5,9.6, 9.3, 8.1)); names(x) <- c("Time", "Value")
y <- data.frame(c(1,2,3,4,5), c(8.5, 3.7, 5.4, 4.7, 9.2)); names(y) <- c("Time", "Value")
dat <- list(x, y); names(dat) <- c("place1", "place2")
> dat
$place1
Time Value
1 1 4.2
2 2 6.5
3 3 9.6
4 4 9.3
5 5 8.1
$place2
Time Value
1 1 8.5
2 2 3.7
3 3 5.4
4 4 4.7
5 5 9.2
但这给了我一个错误“mutate_impl(.data,dots)中的错误”:
评估错误:递归索引在级别3失败”
如果我知道我想要列表中的哪个元素,我可以单独完成,例如
> dat[[1]][match(df$Time, dat[[1]]$Time), "Value"]
[1] 4.2 6.5 4.2 8.1
但是,如果我想通过多个元素,我该怎么做呢?谢谢
df$Value = sapply(1:NROW(df), function(i) dat[[df$Place[i]]][["Value"]][df$Time[i]])
df
# Place Time Value
#1 place1 1 4.2
#2 place1 2 6.5
#3 place2 1 8.5
#4 place1 5 8.1
或
或
将列表放入长格式可能更容易:
l=data.table::rbindlist(dat,idcol=TRUE)
,这样更容易匹配或合并l$Value[match(粘贴(粘贴(df$Place,df$Time),粘贴(l$.id,l$Time))]
(我确信至少在第二步中会有更多的data.table
方式)将列表放入长格式可能更容易:l=data.table::rbindlist(dat,idcol=TRUE)
,这将使匹配或合并更容易<代码>l$值[匹配(粘贴(df$位置,df$时间),粘贴(l$.id,l$时间))](我确信至少在第二步中会有更多的数据表
方式)
> dat[[1]][match(df$Time, dat[[1]]$Time), "Value"]
[1] 4.2 6.5 4.2 8.1
df$Value = sapply(1:NROW(df), function(i) dat[[df$Place[i]]][["Value"]][df$Time[i]])
df
# Place Time Value
#1 place1 1 4.2
#2 place1 2 6.5
#3 place2 1 8.5
#4 place1 5 8.1
merge(x = df[c("Place", "Time")],
y = do.call(rbind, lapply(names(dat), function(x) data.frame(Place = x, dat[[x]]))),
all.x = TRUE)
# Place Time Value
#1 place1 1 4.2
#2 place1 2 6.5
#3 place1 5 8.1
#4 place2 1 8.5
do.call(rbind,lapply(names(dat),function(nm){merge(df[df$Place==nm,setdiff(colnames(df),"Value")],dat[[nm]],by=c("Time"))}))
Time Place Value
1 1 place1 4.2
2 2 place1 6.5
3 5 place1 8.1
4 1 place2 8.5