【问题标题】:Looping over a column and replacing values if condition is met in r如果在 r 中满足条件,则循环遍历列并替换值
【发布时间】:2020-12-19 02:52:19
【问题描述】:

我仍然是 R 的初学者,我正在尝试弄清楚如何在循环中重写我的索引。

我有一个专栏party,它只列出了政党隶属关系。我编写了一个循环来替换列中不是democrat 或republican 的任何值。

for(i in 1:length(party3$party)){
  if(party3$party[i] != "democrat" || party3$party[i] != "republican"){
  party3$party[i] <- "I" }}

我的专栏party 看起来像这样:

party
republican
independent
democrat
libertarian
independent
american independent
republican
democrat

我正在努力保持democrat 和republican 不变:

party
republican
I
democrat
I
I
I
republican
democrat

问题是,一切最终都被“我”所取代。如何修复此循环的索引?

【问题讨论】:

  • party3$party[!party3$party %in% c("republican","democrat")] &lt;- "I"

标签: r for-loop if-statement


【解决方案1】:

您可以在没有for 循环的情况下分配值:

party3$party[!party3$party %in% c("democrat", "republican")] <- 'I'

#       party
#1 republican
#2          I
#3   democrat
#4          I
#5          I
#6          I
#7          I
#8 republican
#9   democrat

在您的for 循环中,您需要使用&amp;&amp; 而不是||,并且当两个值都不存在时它应该替换值。

for(i in 1:length(party3$party)) {
  if(party3$party[i] != "democrat" && party3$party[i] != "republican"){
    party3$party[i] <- "I" 
  }
}

【讨论】:

  • 这行得通,但是如果我想用ifelse 命令让它更短怎么办?我有party3 &lt;- senate_df_rm_na %&gt;% select(party) %&gt;% mutate(party_coded = ifelse(party3$party == 'democrat' || party3$party =='republican',1,0)),但我在添加的列中不断得到一整列 1...(senate_df_rm_na 是我正在使用的整个 df,上面的示例只是其中 party 列的 sn-p)
  • || 用于标量比较。使用|、senate_df_rm_na %&gt;% select(party) %&gt;% mutate(party_coded = ifelse(party == 'democrat' |party =='republican',1,0)。您也可以在没有ifelse 的情况下执行此操作。 senate_df_rm_na %&gt;% select(party) %&gt;% mutate(party_coded = as.numeric(party == 'democrat' | party =='republican'))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 2020-04-29
  • 1970-01-01
  • 2020-03-07
  • 2019-04-06
  • 1970-01-01
相关资源
最近更新 更多