R if语句错误:条件长度> 1,只使用第一个元素

时间:2016-07-29 01:58:24

标签: r if-statement replace

I have this data set which looks something like this.

This is the error I got

这是我的代码

read <- read.csv("sample.csv")

text2 <- read$text2
if(text2 == "No concern" | text2 == "No concern." | text2 == "No concerned" | text2 == "No concerns." | text2 == "No concerns") {
  read$emotion <- "unknown"
  read$polarity <- "neutral"
}else 
{
  read$emotion = emotion
  read$polarity = polarity
}

write.csv(text2, file = "test1.csv", row.names = TRUE)

我实际上想过使用if或if else语句来改变csv文件中的情感和极性(见附图)。我想改变情绪和极性的原因是因为有些不正确。因此,例如,如果在text2下,它是&#34;没关注&#34;,&#34;没有问题&#34;,或者&#34;没有关注&#34;它的情绪应该是未知的,极性应该是中立的。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

if语句未进行矢量化。 help("if")cond

中的if (cond) expr上发言
  

非NA的长度为一的逻辑向量。长度大于1的条件被警告接受,但仅使用第一个元素。如果可能的话,其他类型被强制为逻辑,忽略任何类。

您可以使用ifelse()尝试向量:

ifelse (text2 %in% c("No concern", "No concern.", "No concerned", "No concerns.", "No concerns"),
{read$emotion <- "unknown"; read$polarity <- "neutral"},
{read$emotion <- read$emotion; read$polarity <- read$polarity}
)

(由于缺少数据而无法运行)

编辑:data.table版本:

library(data.table)
read <- fread("sample.csv")
read[text2 %like% "^No concern", emotion := "unknown"]
read[text2 %like% "^No concern", polarity := "neutral"]

text2 %like% "^No concern"选择以&#34开头的所有read行;无关紧要&#34;。仅对于那些行,emotionpolarity列的内容才会更改。所有其他行将保持不变。

  

注意:如果性能很重要,最后两个语句可以组合成一个赋值语句。

read[text2 %like% "^No concern", c("emotion", "polarity") := list("unknown", "neutral"]