我上面的问题并没有完全解释我所面临的问题。 只是一个免责声明 - 我对R非常非常新,而且我在教自己(或者说Google教我),如果我的问题真的很天真,那么道歉。 我有一个家庭级别的数据,我将其转换为个人级别。它的长期和短期是创造了大量的NA。数据看起来像这样:
我希望拥有相同代码的家庭拥有相同的省份和地区,而不是NA。数据是这样的,因为一个家庭中有不止一个人(显然)。实际数据比这大得多。
非常感谢任何帮助!我可以根据需要提供更多信息。
最佳, 阿斯马贾
答案 0 :(得分:1)
你想要这样的东西:
dataframe$Z <- ifelse(is.na(dataframe$X), dataframe$Y, dataframe$X)
dataframe
是有问题的数据框架; X
是包含一些NA
值的列; Y
是要回归的专栏; Z
是包含合并结果的列
答案 1 :(得分:1)
您可以尝试这种循环方法:
# in initialize a new data frame
data2 = NULL
codes = unique(data$hhcode)
for(i in 1:length(codes)){
# subset data by hhcode
data1 = data[data$hhcode == codes[i],]
# as long as you only have one unique region per code
# you can pull out the unique factor and then set all
# region variable for a single code
region = data1$region[is.na(data1$region) == F]
data1$region = region
# do the same for province
province = data1$province[is.na(data1$province ) == F]
data1$province = province
#bind data to a new data frame
data2 = rbind(data2,data1)
}
head(data2)
data2[1:30,]
答案 2 :(得分:1)
所以作为一个新手你可以使用一个简单的for循环。稍后再使用apply()中的sthg。
第1步) 创建数据集。 “sdgfsdh”是正确的,OP对dput(head(dataframe,10))的使用会更好。但是为了方便R-Rooky。 重新创建数据集:
df = data.frame(hhcode = c(rep(101010101, 5), rep(101010102, 5), rep(101010103, 5)),
province = c(rep(c(rep(NA, 4), "punjab"), 2), c(rep(NA, 4), "sindh")),
region = rep(c(rep(NA, 4), "urban"), 3))
2) 替换NA。
对于每一行,我们要替换第二列和第三列。或者换句话说:除了第一列之外,我们想要替换每一列。如果我们在索引前写一个减号,我们可以排除列:df [, - 1]。 现在我们想用行a)替换那些不为“region”和“province”获得NA的行,而b)共享相同的hhcode值。
a)我们如何识别不获取NA的行?使用na.omit(df)。 b)假设df $ hhcode存储在一个名为hhcode的变量中,那么我们想要df $ hhcode等于hhcode的行 - &gt; df $ hhcode == hcode。 (注意哪个()给出了df $ hhcode == hcode中“TRUE”个案的索引。
最后,我们想对每个存在的唯一hhcode重复这一点。这句话中的重要词语是:“for”和“unique”。 在您的数据集中,我可以识别共享相同“hhcode”的组。我们可以通过df $ hhcode访问hhcode。要获得所有唯一的hhcode,我们使用unique(df $ hhcode)。 所以我们遍历唯一的每个元素(df $ hhcode)并替换NAs =)。
for(hhcode in unique(df$hhcode)){
df[which(df$hhcode == hhcode), -1] = na.omit(df)[na.omit(df)$hhcode == hhcode, -1]
}
df
答案 3 :(得分:0)
df = data.frame(hhcode = c(rep(101010101, 5), rep(101010102, 5), rep(101010103, 5)),
province = c(rep(c(rep(NA, 4), "punjab"), 2), c(rep(NA, 4), "sindh")),
region = rep(c(rep(NA, 4), "urban"), 3))
首先生成一个data.frame df_complete123,其中只包含前三列中的完整个案(无NA)
df_complete123 <- df[!is.na(df$province) & !is.na(df$region),]
看起来像这样
hhcode province region
101010101 punjab urban
101010102 punjab urban
101010103 sindh urban
接下来,您将使用它作为某种查找表。第一
indices <- match(df$hhcode, df_complete123$hhcode)
会给你这个
1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
这意味着df
中第一列(hhcode)的条目可以在df_complete123的1,1,1,1,2,2,...中找到。
你用它来用df_complete123替换df中第2和第3列的值:
df$province <- df_complete123$province[indices]
df$region <- df_complete123$region[indices]
这导致
hhcode province region
1 101010101 punjab urban
2 101010101 punjab urban
3 101010101 punjab urban
4 101010101 punjab urban
5 101010101 punjab urban
6 101010102 punjab urban
7 101010102 punjab urban
8 101010102 punjab urban
9 101010102 punjab urban
10 101010102 punjab urban
11 101010103 sindh urban
12 101010103 sindh urban
13 101010103 sindh urban
14 101010103 sindh urban
15 101010103 sindh urban
祝你好运!