如何重新排序仅包含r中文本的列

时间:2017-04-01 17:39:19

标签: r

我在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以外,是否有任何简单的方法来检查每一列以查看它是否包含文本,如果没有,则将其他列文本复制到该列中。

1 个答案:

答案 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)]))) 元素,然后使用pasteread.table

阅读
fill = TRUE

数据

df2 <- read.table(text=do.call(paste, df1), header=FALSE, 
                  na.strings = "", col.names = names(df1), fill = TRUE)