如何使用变量指定R语言dataframe列名或列表元素名?
如何用变量值作为dataframe列名或列表元素名?
这问题我太熟了!当你直接写data.frame(i=1:2, wesh=3:4)的时候,R会把i当成字面量名称,而不会去解析变量i里存的字符串"yo"。下面给你几种简单直接的解决办法:
对于DataFrame
方法1:用命名列表构造(最直观)
先创建一个以变量值为名称的列表,再转成dataframe:
i <- "yo" # 先构建命名列表 df_components <- list() df_components[[i]] <- 1:2 # 这里用[[i]]会解析变量i的值作为名称 df_components[["wesh"]] <- 3:4 # 转成dataframe df <- data.frame(df_components)
输出结果:
yo wesh 1 1 3 2 2 4
方法2:用setNames直接指定列名
如果想一步到位,可以用setNames函数给新创建的dataframe指定列名:
i <- "yo" df <- setNames(data.frame(1:2, 3:4), c(i, "wesh"))
这个写法更简洁,直接把第一列的名称设为变量i的值。
方法3:创建后重命名(适合已有dataframe)
如果已经创建了列名为i的dataframe,也可以事后修改列名:
i <- "yo" df <- data.frame(i=1:2, wesh=3:4) # 找到名为"i"的列,替换成变量i的值 colnames(df)[colnames(df) == "i"] <- i
对于列表
方法1:用[[赋值(最推荐)
创建列表时直接用[[变量名]]的方式赋值,R会自动把变量值作为元素名称:
i <- "yo" my_list <- list() my_list[[i]] <- 1:2 my_list[["wesh"]] <- 3:4
输出结果:
$yo [1] 1 2 $wesh [1] 3 4
方法2:创建后修改元素名
和dataframe的思路一样,先创建列表再修改名称:
i <- "yo" my_list <- list(i=1:2, wesh=3:4) names(my_list)[names(my_list) == "i"] <- i
为什么原来的写法不行?
简单说:在data.frame(i=1:2)或者list(i=1:2)里,i=是参数的命名方式,R会把i直接当作字符串"i"来使用,不会去读取变量i存储的内容。只有通过[[或者setNames这类方式,才能让R解析变量的实际值作为名称。
内容的提问来源于stack exchange,提问作者user3631369
相关产品推荐
相关产品推荐

