【问题标题】:Access variable values using name of variable in string, R使用字符串中的变量名称访问变量值,R
【发布时间】:2015-02-18 17:28:17
【问题描述】:

简介

一个数据集有大量的age.year 变量:age.1990, age.1991, etc. 我有一个字符串值数组length(age.years) 代表这些变量,这样age.years[1] 返回"age.1990" 等。

需要

我想搜索每条记录的age.year 变量以找到值60。最终,如果 age.1991[1] 等于 60,那么新变量 Y.60[1] 将采用值 Y.1991[1]

问题

如何使用数组中的字符串作为变量名以避免手动编码每个var.year 变量? Get() 似乎不起作用。

# EXAMPLE CODE
big.data= data.frame(ID= c(1,2), age.1990= c(60, NA), 
  age.1991= c(61, 60), age.1992= c(62, 61), Y.1990= c(100, 120), 
  Y.1991= c(NA, 125), Y.1992= c(115, 130), Y.60= c(NA, NA) )

big.data
#   ID age.1990 age.1991 age.1992 Y.1990 Y.1991 Y.1992 Y.60
# 1  1       60       61       62    100     NA    115   NA
# 2  2       NA       60       61    120    125    130   NA 

age.years = names(big.data)[2:4]
Y.years = names(big.data)[5:7]
age.years[1]= paste0("big.data$", age.years[1])
age.years[1]
# [1] "big.data$age.1990"
summary(age.years[1])
# Length     Class      Mode 
#    1 character character 
summary(get(age.years[1]))
# Error in get(age.years[1]) : object 'big.data$age.1990' not found
# Why not found??

【问题讨论】:

  • 试试big.data[[age.years[1]]]。双括号按名称或编号查找单个列。
  • 只是好奇,我添加了您的编辑并获得了应有的信任,而您删除了答案标记。你还需要这个问题的帮助吗?或者也许编辑取消了它?不能说我对 SO 还不陌生,所以我很好奇。
  • 供以后参考。如果问题确实得到了解决,那么标记它的好处是它不再出现在“未回答的问题”部分中,无论如何 R 都相当拥挤。但一定要找到自己的方式。

标签: arrays r string list


【解决方案1】:

您可以使用括号中的粘贴来访问列,就像使用 $ 一样。

big.data[paste0(age.years[1])]

此外,您可以只使用数字来访问这样的列。

years <- c(1990:1992)
big.data[paste0("age.",years[1])]

循环会像这样工作。

for (iy in 1:length(years)){
  big.data$Y.60 <- NA
  big.data$Y.60  <- ifelse(big.data[paste0("age.",years[iy])] == 60,     +
     paste0("Y.",years[iy]),big.data$Y.60 ) 
 }

如果我正确理解你的目的。

更新:

或者作者@jtd 用括号代替粘贴的替代答案。

for (iy in 1:length(age.years)) {
   big.data$Y = ifelse(big.data[[age.years[iy]]] == 60,
              big.data[[Y.years[iy]]],
              big.data$Y
              )
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多