我在R中有一个看起来像这样的数据框
ClientID Reason_1 Reason_2 Reason_3 Reason_4 Reason_5 Reason_6 Reason_7 Reason_8
ABC Trend Low High Med
XYZ High Low Low
PQW High Low Med
每个原因列中都没有文字,我想将其重新排序到以下
ClientID Reason_1 Reason_2 Reason_3 Reason_4 Reason_5 Reason_6 Reason_7 Reason_8
ABC Trend Low High Med
XYZ High Low Low
PQW High Low Med
除了ifelse
以外,是否有任何简单的方法来检查每一列以查看它是否包含文本,如果没有,则将其他列文本复制到该列中。
答案 0 :(得分:2)
这可以通过使用带有apply
的{{1}}循环遍历行来完成,以仅选择非空元素,然后选择空元素,将它连接在一起,转置并将其分配回原始元素数据集
MARGIN = 1
如果空白为df1[] <- t(apply(df1, 1, FUN = function(x) c(x[x!=""], x[x==""])))
df1
# ClientID Reason_1 Reason_2 Reason_3 Reason_4 Reason_5 Reason_6 Reason_7
#1 ABC Trend Low High Med
#2 XYZ High Low Low
#3 PQW High Low Med
# Reason_8
#1
#2
#3
,请使用NA
代替is.na
和==
!=
或另一种选择是逐行df1[] <- t(apply(df1, 1, FUN = function(x) c(x[!is.na(x)], x[is.na(x)])))
元素,然后使用paste
和read.table
fill = TRUE
df2 <- read.table(text=do.call(paste, df1), header=FALSE,
na.strings = "", col.names = names(df1), fill = TRUE)