数据集包含大量age.year
变量:age.1990, age.1991, etc.
我有一个字符串值数组,用于length(age.years)
表示这些变量,例如age.years[1]
return"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[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
)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句