我有一个带有观察结果的.csv导入表.
ED1 ED2 ED3 ED4 ED5 1 NA NA NA NA NA NA 1 NA NA NA 1 NA NA NA NA NA NA NA 1
<-----等------>
因此每行只包含一个值"1",一行中的其他列包含NA.我需要将这五列合并为一个因子列.
喜欢:
EDU
2
3
3
1
2
1
或者这可能是因子列"ED1","ED2","ED3"等因素(作为源列的名称).
这里不需要使用apply()
循环.你可以max.col()
结合使用否定的电话is.na()
.
max.col(!is.na(df)) # [1] 1 3 2 5
这给了我们1s的列号.为了获得列名,我们可以names()
在数据帧的向量子集中使用它.
names(df)[max.col(!is.na(df))] # [1] "ED1" "ED3" "ED2" "ED5"
因此,我们可以通过因子列获得所需的数据框
data.frame(EDU = names(df)[max.col(!is.na(df))]) # EDU # 1 ED1 # 2 ED3 # 3 ED2 # 4 ED5
数据:
df <- structure(list(ED1 = c(1, NA, NA, NA), ED2 = c(NA, NA, 1, NA), ED3 = c(NA, 1, NA, NA), ED4 = c(NA, NA, NA, NA), ED5 = c(NA, NA, NA, 1)), .Names = c("ED1", "ED2", "ED3", "ED4", "ED5" ), row.names = c(NA, -4L), class = "data.frame")