使用通用相同名称

时间:2017-11-09 16:47:07

标签: r

我有一个这样的数据框:

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))

有没有办法实现呢?

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,以便您可以轻松地将该规则适应您的实际数据和/或更复杂的标准。