gpt4 book ai didi

r - 根据条件从数据帧创建具有二进制值的 df

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

我有一个数据框,例如;

   Groups   Value
G1 NA
G1 NA
G1 NA
G1 23
G2 NA
G2 NA
G2 NA
G2 NA
G2 NA
G2 NA
G3 34
G3 21
G4 NA
G4 NA
G5 NA
G5 45

我正在 R 中寻找一个代码,以便获得另一个具有二进制值的数据框(1 表示组中至少一个值是 >=1)和(0 表示仅包含 NA 值的组)

并得到一个新的数据报,例如:

G1  G2  G3  G4  G5
1 0 1 0 1

感谢您的帮助。

最佳答案

我们可以使用 base R 中的 table。获取'Value'列作为逻辑向量(!is.na),并找到'Groups'的频率表,检查频率是否大于0,将逻辑向量转换为二进制as.integer+

+(table(df1$Groups, !is.na(df1$Value))[,2] > 0)
# G1 G2 G3 G4 G5
# 1 0 1 0 1

或者使用 base R 中的 rowsum

rowsum(+!is.na(df1$Value), df1$Groups)

注意:以上两种方法都是base R - 没有使用包


或者使用tidyverse

library(tidyverse)
df1 %>%
group_by(Groups) %>%
summarise_all(list(~ as.integer(sum(!is.na(.)) > 0)))
# A tibble: 5 x 2
# Groups Value
# <chr> <int>
#1 G1 1
#2 G2 0
#3 G3 1
#4 G4 0
#5 G5 1

或者用data.table

library(data.table)
setDT(df1)[, +(sum(!is.na(Value)) > 0), Groups]

数据

df1 <- structure(list(Groups = c("G1", "G1", "G1", "G1", "G2", "G2", 
"G2", "G2", "G2", "G2", "G3", "G3", "G4", "G4", "G5", "G5"),
Value = c(NA, NA, NA, 23L, NA, NA, NA, NA, NA, NA, 34L, 21L,
NA, NA, NA, 45L)), class = "data.frame", row.names = c(NA,
-16L))

关于r - 根据条件从数据帧创建具有二进制值的 df,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56079772/

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