【问题标题】:multiple condition then creating new column多个条件然后创建新列
【发布时间】:2019-10-16 04:17:32
【问题描述】:

我有一个包含两列的数据集,我需要创建第三列,其中包含第一列和第二列的条件。

set.seed(1)
x1=(sample(1:10, 100,replace=T))
y1=sample(seq(1,10,0.1),100,replace=T)

z=cbind(x1,y1)
unique(as.data.frame(z)$x1)
z%>%as.data.frame()%>%dplyr::filter(x1==3)

table(x1)
 1  2  3  4  5  6  7  8  9 10 
 7  6 11 14 14  5 11 15 11  6 

> z%>%as.data.frame()%>%dplyr::filter(x1==3)
   x1   y1
1   3  6.9
2   3  9.5
3   3 10.0
4   3  5.6
5   3  4.1
6   3  2.5
7   3  5.3
8   3  9.5
9   3  5.5
10  3  8.9
11  3  1.2

例如,当我过滤 x==3 时,可以看到 y1 值,我需要在第 11 行写 1,其余为 0。我需要在该列中找到最小值。我的原始数据集有 43545 行,但只有 638 个唯一数字,例如 x1。表 x1 显示 1 重复了 7 次,但在我的数据集中,有些频率为 1,有些频率为 100。我应该使用 case_when 但如何检查每个 y1 以找到放 1 的最小值?

【问题讨论】:

    标签: r subset selection dplyr


    【解决方案1】:

    如果我理解正确,您正在寻找每个 x1 值的 y1 值最小的行

    library(tidyverse)
    z %>% as.data.frame() %>% 
          group_by(x1) %>% 
          arrange(y1) %>% # sort values by increasing order within each group
          mutate(flag = ifelse(row_number()==1,1,0)) %>% # create flag for first row in group
          ungroup()
    

    【讨论】:

    • 这正是我想要做的。当我尝试时,安排给了我一个错误。但这有效。谢谢!
    • 排列有什么错误?也许在代码之前添加library(tidyverse) 会有所帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 2020-04-18
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多