gpt4 book ai didi

r - 如何在R中将两列合并为一列,使第二列中的每个值都变成第一列中的每隔一个值?

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

我有以下数据集:

library(plyr)
library(dplyr)
detach(package:plyr)
library(dplyr)

position <- c("A", "A", "B", "C", "D", "E", "F", "F")
level <- c("P", "S", "J", "J", "P", "S", "S", "S")
car <- c("yes", "no", "no", "no", "no", "yes", "no", "yes")
car.data <- data.frame(position, level, car)

percent_car <- car.data %>%
group_by(position) %>%
summarise (car_yes = sum(car == "yes"), car_no = sum(car == "no")) %>%
mutate(yes_perc = car_yes/(car_yes + car_no), no_perc = car_no/(car_yes + car_no))
percent_car
输出为:
    position car_yes car_no yes_perc no_perc
<chr> <int> <int> <dbl> <dbl>
1 A 1 1 0.5 0.5
2 B 0 1 0 1
3 C 0 1 0 1
4 D 0 1 0 1
5 E 1 0 1 0
6 F 1 1 0.5 0.5
我的目标是从这个数据集创建圆环图,为此我需要一种形式的数据,其中每个位置都有两行 - 一行用于有车的人,另一行是没有车的人。另外我想计算每一行的 ymax 和 ymin :
 Position yes_no car_yes_no yes_no_perc  ymax  ymin
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 A yes 1 0.5 0.5 0
2 A no 1 0.5 1 0.5
3 B yes 0 0 0 0
4 B no 1 1 1 0
5 C yes 0 0 0 0
6 C no 1 1 1 0
7 D yes 0 0 0 0
8 D no 1 1 1 0
9 E yes 1 1 0 0
10 E no 0 0 1 0
11 F yes 1 0.5 0.5 0
12 F no 1 0.5 1 0.5

目前我正在 Excel 中创建第二个数据集。您知道如何在 R 中直接创建这样的数据集吗?
谢谢!

最佳答案

不完全确定您对 ymin 的逻辑是什么/ymax但这是总体思路,逐行运行以查看发生了什么。

percent_car %>%
pivot_longer(names_to = "key", values_to = "value", -position) %>%
mutate(
yes_no = str_extract(key, "yes|no"),
key = str_remove_all(key, "yes|no|_")
) %>%
pivot_wider(names_from = key, values_from = value) %>%
arrange(position) %>%
mutate(
ymax = if_else(yes_no == "yes", perc, 1),
ymin = if_else(yes_no == "yes", 0, 1-perc)

)
)
case_when如果 if_else 将成为您的 friend 需要嵌套

关于r - 如何在R中将两列合并为一列,使第二列中的每个值都变成第一列中的每隔一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68918863/

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