我有一个数据框,其结构如下所示。基于特定条件,我想为该条件为真的每隔一行分配一个新值。我想知道是否有人可以帮助我为发生条件的每隔一行分配新值,并将这些更改保留在我的主数据框中。
在我的数据中,每个人都从每种类型的评分员那里得到了分数。有评分员1,评分员2和其他。我的数据集中的每个人都应该从这三个评分员中得到一个评分。然而,有些人从两个“其他”评分员那里得到了分数。所以在人们从两个“其他”评分员那里得到分数的情况下,我想把第二个“Other”评分者标记为“Other 2”。我试图用下面列出的代码来做到这一点,但我很快意识到,通过使用“filter”命令,我将无法取消过滤,并保留我在更广泛的数据集中所做的更改。
以下是我的当前代码:
d %>% filter(rater=="Other") %>% group_by(id) %>%
filter(n()>1) %>% mutate(rater= case_when(ifelse(row_number()%%2==0,"Other2",rater))
下面我展示了我的数据当前的样子以及我希望数据的样子。
以下是我的数据目前的样子:
| 身份证|评分员|评分员评分|
| --------------|--------------|--------------|
| 1个|评分员2|三|
| 1个|评分员1|二|
| 1个|其他|三|
| 二|评分员1|一点五|
| 二|评分员2|3.2|
| 二|其他|1.1|
| 二|其他|二|
| 三|评分员1|二点五|
| 三|评分员2|2.7|
| 三|其他|2.1|
| 三|其他|二|
| 四|评分员1|二点五|
| 四|评分员2|2.7|
| 四|其他|2.1|
| 四|其他|二|
| 五|评分员1|二点五|
| 五|评分员2|2.7|
| 五|其他|2.1|
下面是我希望我的数据看起来像什么(你会注意到,第二个“其他”评分者已更改为“其他2”:
| 身份证|评分员|评分员评分|
| --------------|--------------|--------------|
| 1个|评分员2|三|
| 1个|评分员1|二|
| 1个|其他|三|
| 二|评分员1|一点五|
| 二|评分员2|3.2|
| 二|其他|1.1|
| 二|其他2|二|
| 三|评分员1|二点五|
| 三|评分员2|2.7|
| 三|其他|2.1|
| 三|其他2|二|
| 四|评分员1|二点五|
| 四|评分员2|2.7|
| 四|其他|2.1|
| 四|其他2|二|
| 五|评分员1|二点五|
| 五|评分员2|2.7|
| 五|其他|2.1|
有人能帮我吗?谢谢!
2条答案
按热度按时间i7uq4tfw1#
结果如下。根据您的描述,我怀疑您最后两行所需的输出中有错别字。第10行似乎是ID 2的第三个其他,第11行是ID 3的第一个其他。
9ceoxa922#
我怀疑排印错误是在id列第9行和第10行应该是3:
我们可以这样做:
使用
dplyr >= 1.1.0
更优雅