我想创建一个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的结果。
答案 0 :(得分:1)
好的,我想我现在知道您的需求。
eval(parse(text = paste0("ABC_D1", '$estimate')))
您连接两个字符串并使用函数parse
和eval
获取结果。
这是如何针对您的整个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)
这不是真的建议,但鉴于这些前提...