将字符列表转换为R中的命名num

时间:2019-04-26 20:11:41

标签: r class dataframe statistics correlation

我想创建一个3列的数据框。

#First column
name_list = c("ABC_D1", "ABC_D2", "ABC_D3", 
              "ABC_E1", "ABC_E2", "ABC_E3",
              "ABC_F1", "ABC_F2", "ABC_F3")

df1 = data.frame(C1 = name_list)

第1列中的这些名称是cor.test函数的一堆命名结果。第二列应包含我通过编写ABC_D1 $ estimate,ABC_D2 $ estimate得到的相关系数。

我的问题是,现在我不想手动将$ estimate添加到第一列的每个单个名称中。我尝试过:

df1$C2 = paste0(df1$C1, '$estimate')

但是这行不通,它只能给我回去:

"ABC_D1$estimate", "ABC_D2$estimate", "ABC_D3$estimate", 
"ABC_E1$estimate", "ABC_E2$estimate", "ABC_E3$estimate",
"ABC_F1$estimate", "ABC_F2$estimate", "ABC_F3$estimate")

class(df1$C2)
[1] "character

如何获取数据框中ABC_D1 $ estimate的数值结果?如何将这些字符转换为Name num?第三栏应包含$ p.value的结果。

2 个答案:

答案 0 :(得分:1)

好的,我想我现在知道您的需求。

eval(parse(text = paste0("ABC_D1", '$estimate')))

您连接两个字符串并使用函数parseeval获取结果。

这是如何针对您的整个data.frame:

name_list = c("ABC_D1", "ABC_D2", "ABC_D3", 
              "ABC_E1", "ABC_E2", "ABC_E3",
              "ABC_F1", "ABC_F2", "ABC_F3")

df1 = data.frame(C1 = name_list)

df1$C2 <- map_dbl(paste0(df1$C1, '$estimate'), function(x) eval(parse(text = x)))

答案 1 :(得分:1)

如@DSGym所指出的那样,存在几个问题,包括拥有一个字符名称列表不是很方便,而最好有一个对象列表。

无论如何,我认为您可以使用以下方法到达想要的地方:

estimates <- lapply(name_list, function(dat) {
                          dat_l <- get(dat)
                          dat_l[["estimate"]]
                          }
                            )

cbind(name_list, estimates)

这不是真的建议,但鉴于这些前提...