我有这个名为data的数据框。在数据框中我有几列,为简单起见,我将用天气类比解释列,它就像“weather_st_louis”,“weather_boston”,“weather_ny”......我想建立一个列“天气”,它应该这样做,“如果存在天气,请使用此栏,否则如果波士顿天气存在,请使用此栏,否则如果天气存在于ny,请使用此栏,否则无”。我将多次使用这个逻辑,有很多列,所以需要一种方法来提高效率。 R的方法是什么。
另外,附带问题,我正在尝试在这里建立一个名为“过滤器”的东西吗?
if(exists("data['w_stlouis']")) {
data['w'] <- data['w_stlouis']
} else if(exists("data['w_boston]")){
data['w'] <- data['w_boston']
} else if(exists("data['w_ny']")){
data['w'] <- data['w_ny']
} else {data['w'] <- NA}
答案 0 :(得分:0)
尝试类似的东西:
example <- matrix(NA,ncol=5,nrow=5)
colnames(example) <- c("weather_1","weather_2","weather_3","weather_4","weather_5")
example[5,3] <- 1
example[3,2] <- 1
example[1,2] <- 1
example[4,4] <- 1
example[5,2] <- 1
w <- apply(example,1,function(x){
o <- which(!is.na(x))[1]
if (is.na(o)) r <- "NONE"
else r <- colnames(example)[o]
r
})
w
当你有重复的任务要做时,尝试使用apply / tapply / sapply函数
答案 1 :(得分:0)
这是另一个可能性。我不确定这是否是你需要的,但也许它会为你提供另一种方法来处理它。
df <- data.frame(matrix(rnorm(100, 100, 20),ncol=5,nrow=5))
colnames(df) <- c("weather_1","weather_2","weather_3","weather_4","weather_5")
library(reshape2)
df <- melt(df)
df[1:10,2] <- NA
str(df)
weather_levels <- levels(df$variable)
df$case <- ifelse(is.na(df$value), 0, 1)
这两个输出相同的结果
subset(df, df$case == 1)
na.omit(df)