【问题标题】:Replace all rows after the first one for a particular condition the same in R将第一行之后的所有行替换为 R 中相同的特定条件
【发布时间】:2021-05-21 15:47:30
【问题描述】:

想象这是 R 中的一个数据框(我不确定如何导入我的数据框)。我想从这里去

word cat
book distracter
cat target
cat distracter
cat target
apple distracter
apple target

word cat
book distracter
cat target
cat target
cat target
apple distracter
apple distracter

我知道我可以通过慢慢检查每个索引并手动更改它们来做到这一点,但是有没有更好的方法在特定条件第一次出现后用相同的值替换这些值?

目前对我想要更改的每一行都执行以下操作。

data1$cat[3] <- "target"

注意。我要做的是当我第一次看到一个新词“猫”时,猫类别中对应的值是“目标”。现在我想用相同的“目标”值替换它之后的任何行。所以在第三行,我应该用目标替换干扰器。以及第 6 行,我需要将“target”替换为“distracter”!

任何帮助都会很棒!谢谢!

可重现的样本数据

structure(list(word = c("book", "cat", "cat", "cat", "apple", 
"apple"), cat = c("distracter", "target", "distracter", "target", 
"distracter", "target")), class = "data.frame", row.names = c(NA, 
-6L))

【问题讨论】:

标签: r


【解决方案1】:

我希望这是您的想法。我想你应该用每组单词的第一个值替换每隔一行:

library(dplyr)


df %>%
  group_by(word) %>%
  add_count() %>%
  mutate(id = row_number()) %>%
  mutate(cat = ifelse(n > 1 & id >= 2, first(cat), cat)) %>%
  select(-c(n, id))


# A tibble: 6 x 2
# Groups:   word [3]
  word  cat       
  <chr> <chr>     
1 book  distracter
2 cat   target    
3 cat   target    
4 cat   target    
5 apple distracter
6 apple distracter

【讨论】:

    【解决方案2】:

    由于第二列名为“cat”,我假设您要将“word”等于“cat”的每个条目标记为“target”?

    data$cat[data$word == "cat"] <- "target"
    data$cat[data$word != "cat"] <- "distractor"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 2017-08-15
      • 2018-01-26
      • 1970-01-01
      • 1970-01-01
      • 2016-06-20
      • 2022-07-14
      相关资源
      最近更新 更多