我有一个数据表,如下所示:
old1 old2 old3 old4
aaa ccc
aaa bbb
bbb ccc ddd
我要删除空列,使其具有以下内容:
new1 new2 new3
aaa ccc
aaa bbb
bbb ccc ddd
我尝试了以下对我不起作用的事情:
df[, colSums(df!= "") != ""]
df[!sapply(df, function (x) all(is.na(x) | x == ""))]
Filter(function(x) !(all(x==""|x==0)), df)
答案 0 :(得分:1)
使用基数R CodingKey
的一个选项是首先计算最终数据帧(CodingKey
)中将出现的列数。过滤每行中的空值,并使用Encodable
插入空值。
Decodable
使用apply
/ cols
的另一种选择是添加新的行号列,使用rep
,cols <- max(rowSums(df != ""))
as.data.frame(t(apply(df, 1, function(x) {
vals <- x[x != ""]
c(vals, rep("", cols - length(vals)))
})))
# V1 V2 V3
#1 aaa ccc
#2 aaa bbb
#3 bbb ccc ddd
非空值将其转换为长格式,每个gather
spread
,并使用gather
指定新的列名,最后使用filter
将其转换为宽格式。
group_by