通过列表的元素名称=数据框行号从列表中的数据框中分配值
Assign value in dataframe from list by list's element name = dataframe row number
我有一个名单,例如:
> myNamedList
(...)
$`1870`
[1] 84.24639
$`1871`
[1] 84.59707
(...)
我想在数据框的列中分配这些值,其中列表元素的名称对应于数据框的行号。现在我是这样进行的:
for (element in names(myNamedList)) {
targetDataFrame[as.numeric(element),][[columnName]] = myNamedList[[element]]
}
如果列表有点大,这会很慢,而且也不是很 R-esque。我相信我可以用 apply
做点什么,但我不确定去哪里找。感谢您的帮助。
向原始数据添加行号,然后堆叠列表,然后合并。参见示例:
# example
#data
set.seed(1); d <- data.frame(x = sample(LETTERS, 5))
#named list
x <- list("2" = 11, "4" = 22)
#add a row number
d$rowID = seq(nrow(d))
# stack the list, and merge
merge(d, stack(x), by.x = "rowID", by.y = "ind", all.x = TRUE)
# rowID x values
# 1 1 Y NA
# 2 2 D 11
# 3 3 G NA
# 4 4 A 22
# 5 5 B NA
我有一个名单,例如:
> myNamedList
(...)
$`1870`
[1] 84.24639
$`1871`
[1] 84.59707
(...)
我想在数据框的列中分配这些值,其中列表元素的名称对应于数据框的行号。现在我是这样进行的:
for (element in names(myNamedList)) {
targetDataFrame[as.numeric(element),][[columnName]] = myNamedList[[element]]
}
如果列表有点大,这会很慢,而且也不是很 R-esque。我相信我可以用 apply
做点什么,但我不确定去哪里找。感谢您的帮助。
向原始数据添加行号,然后堆叠列表,然后合并。参见示例:
# example
#data
set.seed(1); d <- data.frame(x = sample(LETTERS, 5))
#named list
x <- list("2" = 11, "4" = 22)
#add a row number
d$rowID = seq(nrow(d))
# stack the list, and merge
merge(d, stack(x), by.x = "rowID", by.y = "ind", all.x = TRUE)
# rowID x values
# 1 1 Y NA
# 2 2 D 11
# 3 3 G NA
# 4 4 A 22
# 5 5 B NA