gpt4 book ai didi

r - 应用于 3 个变量的数据框转换

转载 作者:行者123 更新时间:2023-12-05 09:26:06 29 4
gpt4 key购买 nike

我写了几个命令来转换数据框,但我想将我写的代码简化为四个部分。第 1,2 和 3 部分用于计算第 1、2 和 3 列(计算每列重复值的次数,并完成 0 和三列最大值之间的缺失数)。第四部分是加入前面的输出。

我想简化它,以便在一个代码块中转换 3 列而不是 4 列。是否可以不使用函数来实现?

提前谢谢你。

set.seed(1234)

# Data

A=sample(0:10, 20, replace = TRUE)
B=sample(0:10, 20, replace = TRUE)
C=sample(0:10, 20, replace = TRUE)

df=data.frame(A,B,C)

A B C
1 9 2 0
2 5 3 5
3 4 9 7
4 8 4 2
5 4 1 5
6 5 7 0
7 3 10 0
8 1 3 8
9 6 2 7
10 5 6 9
11 9 8 0
12 5 2 10
13 3 5 7
14 7 3 9
15 3 7 5
16 3 9 2
17 4 10 8
18 7 1 2
19 3 4 5
20 7 5 8

# Count for A
df2=data.frame(A=0:max(max(df$A),max(df$B),max(df$C)))

df3_A= df %>%
select(A) %>%
group_by(A) %>%
mutate(A_number= n()) %>%
distinct(A_number, .keep_all = TRUE) %>%
ungroup() %>%
complete (df2)

df3_A$A_number[is.na(df3_A$A_number)]=0

# Count for B

df2=data.frame(B=0:max(max(df$A),max(df$B),max(df$C)))

df3_B= df %>%
select(B) %>%
group_by(B) %>%
mutate(B_number= n()) %>%
distinct(B_number, .keep_all = TRUE) %>%
ungroup() %>%
complete (df2)

df3_B$B_number[is.na(df3_B$B_number)]=0

# Count for C

df2=data.frame(C=0:max(max(df$A),max(df$B),max(df$C)))

df3_C= df %>%
select(C) %>%
group_by(C) %>%
mutate(C_number= n()) %>%
distinct(C_number, .keep_all = TRUE) %>%
ungroup() %>%
complete (df2)

df3_C$C_number[is.na(df3_C$C_number)]=0

# Join

df3= df3_A %>%
left_join(df3_B, by=c("A"="B")) %>%
left_join(df3_C, by=c("A"="C"))

A A_number B_number C_number
<int> <dbl> <dbl> <dbl>
1 0 0 0 4
2 1 1 2 0
3 2 0 3 3
4 3 5 3 0
5 4 3 2 0
6 5 4 2 4
7 6 1 1 0
8 7 3 2 3
9 8 1 1 3
10 9 2 2 2
11 10 0 2 1

最佳答案

使用基础:堆栈:

as.data.frame.matrix(table(stack(df)))
# A B C
# 0 0 0 4
# 1 1 2 0
# 2 0 3 3
# 3 5 3 0
# 4 3 2 0
# 5 4 2 4
# 6 1 1 0
# 7 3 2 3
# 8 1 1 3
# 9 2 2 2
# 10 0 2 1

关于r - 应用于 3 个变量的数据框转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74374221/

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