gpt4 book ai didi

R 元素到元素的操作在组中的几列

转载 作者:行者123 更新时间:2023-12-04 00:57:07 26 4
gpt4 key购买 nike

我们有 mtcars 数据集,想要计算一组不同汽车之间的函数,将几列作为输入。

更具体地说:

  1. 按变速箱 am 和齿轮 gear 分组
  2. 比较同一组中的所有汽车(car1 到 car2、car1 到 car3、car2 到 car3...)
  3. 第一辆车的排量是否比第二辆车大? disp1>disp2
  4. 并且第一辆车的马力是否比第二辆车大? hp1>hp2

结果应该是这样的:

# Car1           Car2           result
# Mazda RX4 Mazda RX4 Wag false
# Mazda RX4 Datsun 710 false
# Mazda RX4 Wag Datsun 710 true

this question是按组的外层操作,但只用到了单列。是否可以将其扩展到多个列?如果可能的话,最好在结果表中包含 disp1disp2 等列。

最佳答案

这有点乱,但您可以执行以下操作:

library(dplyr)
library(tidyr)

dat <- mtcars %>%
tibble::rownames_to_column(var = "Car1") %>%
mutate(Car2 = Car1) %>%
group_by(am, gear) %>%
expand(Car1, Car2) %>%
left_join(tibble::rownames_to_column(mtcars, var = "Car1"), by = "Car1") %>%
left_join(tibble::rownames_to_column(mtcars, var = "Car2"), by = "Car2") %>%
ungroup() %>%
mutate(result = disp.x > disp.y & hp.x > hp.y) %>%
select(Car1, Car2, result)

然后我们得到了预期的结果:

dat

# A tibble: 330 x 3
Car1 Car2 result
<chr> <chr> <lgl>
1 AMC Javelin AMC Javelin FALSE
2 AMC Javelin Cadillac Fleetwood FALSE
3 AMC Javelin Camaro Z28 FALSE
4 AMC Javelin Chrysler Imperial FALSE
5 AMC Javelin Dodge Challenger FALSE
6 AMC Javelin Duster 360 FALSE
7 AMC Javelin Hornet 4 Drive TRUE
8 AMC Javelin Hornet Sportabout FALSE
9 AMC Javelin Lincoln Continental FALSE
10 AMC Javelin Merc 450SE FALSE
# … with 320 more rows

dat %>% filter(Car1 == "Mazda RX4")

# A tibble: 8 x 3
Car1 Car2 result
<chr> <chr> <lgl>
1 Mazda RX4 Datsun 710 TRUE
2 Mazda RX4 Fiat 128 TRUE
3 Mazda RX4 Fiat X1-9 TRUE
4 Mazda RX4 Honda Civic TRUE
5 Mazda RX4 Mazda RX4 FALSE
6 Mazda RX4 Mazda RX4 Wag FALSE
7 Mazda RX4 Toyota Corolla TRUE
8 Mazda RX4 Volvo 142E TRUE

(虽然马自达 RX4 与 Datsun 710 的比较与您陈述的预期结果不同,但实际上是正确的:)

mtcars %>%
tibble::rownames_to_column(var = "Car1") %>%
filter(Car1 %in% c("Mazda RX4", "Datsun 710"))
Car1 mpg cyl disp hp drat wt qsec vs am gear carb
1 Mazda RX4 21.0 6 160 110 3.90 2.62 16.46 0 1 4 4
2 Datsun 710 22.8 4 108 93 3.85 2.32 18.61 1 1 4 1

关于R 元素到元素的操作在组中的几列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61574824/

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