gpt4 book ai didi

r - 数据帧过滤

转载 作者:行者123 更新时间:2023-12-04 04:10:47 25 4
gpt4 key购买 nike

我有以下data.frame df:

df = data.frame(col1    = c('a','a','a','a','a','b','b','c','d'),
col2 = c('a','a','a','b','b','b','b','a','a'),
height1 = c(NA,32,NA,NA,NA,NA,NA,25,NA),
height2 = c(31,31.5,NA,NA,11,12,13,NA,NA),
col3 = 1:9)

# col1 col2 height1 height2 col3
#1 a a NA 31.0 1
#2 a a 32 31.5 2
#3 a a NA NA 3
#4 a b NA NA 4
#5 a b NA 11.0 5
#6 b b NA 12.0 6
#7 b b NA 13.0 7
#8 c a 25 NA 8
#9 d a NA NA 9

我想为 col1, col2中的每对值构建一个包含以下值的列 height:
  • 如果NAheight1中只有height2,则返回NA
  • 如果height1中有一个值,请使用此值。 (对于一对col1, col2,在non NA列中最多有一个height1值)
  • 如果NA中只有height1,而non NA中只有一些height2值,则取height2中的第一个值。

  • 我还需要在 col3列中保留相应的值。

    新的 data.frame new.df如下所示:
    #  col1 col2 height col3
    #1 a a 32 2
    #2 a b 11 5
    #3 b b 12 6
    #4 c a 25 8
    #5 d a NA 9

    我希望使用一种简洁的 data.frame方法,但是我意识到我找不到这种方法!

    最佳答案

    使用dplyr:

    df %>%
    mutate(
    order = ifelse(!is.na(height1), 1, ifelse(!is.na(height2), 2, 3)),
    height = ifelse(!is.na(height1), height1, ifelse(!is.na(height2), height2, NA))
    ) %>%
    arrange( col1, col2, order, height) %>%
    distinct(col1, col2) %>%
    select( col1, col2, height, col3)

    关于r - 数据帧过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28938161/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com