我有一个这样的数据框:
DF <- data.frame(text = c(0, 0, 0, 1), text.1 = c(0, 1, 0, 0), "text sth"=c(1, 0, 0, 0))
我想合并具有每列名称之间通用的单词的列。在示例中,这是“文本”。行的长度相等,数据帧不包含NA。
预期产出的例子:
DF <- data.frame(text = c(1, 1, 0, 1))
有没有办法实现呢?
答案 0 :(得分:2)
你想检查每一行是否包含零以外的东西,对吗?从你提出问题的方式来看,我假设每行代表一个单词,每一列代表一个文档,就像在Term-Document Matrix(TDM)中一样。
您可以使用apply()
对行执行此操作:
apply(DF, 1, function(x) !all(x == 0))*1
# [1] 1 1 0 1
当然,在完整的TDM中,总是每行至少有一个非零条目。
剩下的问题归结为根据某些规则对您的TDM进行子集化:
rule1 <- grepl("text", names(DF))
subdf <- DF[, rule1]
apply(subdf, 1 function(x) !all(x==0))*1
# [1] 1 1 0 1
请注意,我单独计算了rule1
,以便您可以轻松地将该规则适应您的实际数据和/或更复杂的标准。