【问题标题】:Assign value in dataframe from list by list's element name = dataframe row number通过列表的元素名称从列表中分配数据框中的值 = 数据框行号
【发布时间】:2022-01-02 20:59:35
【问题描述】:

我有一个名单,如下所示:

> myNamedList

(...)

$`1870`
[1] 84.24639

$`1871`
[1] 84.59707

(...)

我想在数据框的列中分配这些值,其中列表元素的名称对应于数据框的行号。现在我是这样进行的:

for (element in names(myNamedList)) {
  targetDataFrame[as.numeric(element),][[columnName]] = myNamedList[[element]]
}

如果列表有点大,这会很慢,而且也不是很R-esque。我相信我可以用apply 做点什么,但不知道去哪里找。感谢您的帮助。

【问题讨论】:

    标签: r list dataframe apply


    【解决方案1】:

    将行号添加到原始数据,然后堆叠列表,然后合并。见例子:

    # 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
    

    【讨论】:

    • 效果很好,谢谢。然后我使用plyr::rename 将列从“值”重命名为所需的名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 2021-02-19
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 2021-09-14
    相关资源
    最近更新 更多