Есть ли способ выбрать данные на основе ассоциаций, используя R? - PullRequest
0 голосов
/ 07 мая 2019

Если у меня есть такой набор данных:

names <- c("Dave", "Ashley", "Drew")
score1 <- c(5, 1, 3)
opponent <- c("Drew", "Dave", "Ashley")
x <- cbind(names, score1, opponent)
x
y <- as.numeric(ifelse(x[, 3]==x[1, 1], x[1, "score1"], ifelse(
        x[, 3]==x[2, 1], x[2, "score1"], ifelse(
        x[, 3]==x[3, 1], x[3, "score1"], 1))))
y <- (y * score1)
x <- cbind(x, y)
x

Могу ли я создать цикл, чтобы создать новый столбец, где число в столбце «счет1» умножается на число из «y "столбец из другой строки.Например, создайте новый столбец, в котором значения в [1, 2] будут равны 5, поскольку в строке «Dave» указано «Drew», поэтому столбец «5» «Dave» «Dave» умножается на «Drew» '.s «Score1» столбец «3».Есть ли способ сделать это в цикле, который будет работать на сто строк и сто столбцов?В настоящее время единственный способ, которым я знаю, это написать тонну выражений ifelse, как указано выше.

1 Ответ

0 голосов
/ 07 мая 2019

Вы можете выполнить самостоятельное соединение. Тем не менее, вы должны быть осторожны с дубликатами, если имена повторяются.

names <- c("Dave", "Ashley", "Drew")
score1 <- c(5, 1, 3)
opponent <- c("Drew", "Dave", "Ashley")

x <- data.frame(names,score1,opponent)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
new_df <- left_join(x,x[,-3],by=c("opponent"="names"))
new_df
#>    names score1.x opponent score1.y
#> 1   Dave        5     Drew        3
#> 2 Ashley        1     Dave        5
#> 3   Drew        3   Ashley        1
new_df <- mutate(new_df,y=score1.x * score1.y)
new_df
#>    names score1.x opponent score1.y  y
#> 1   Dave        5     Drew        3 15
#> 2 Ashley        1     Dave        5  5
#> 3   Drew        3   Ashley        1  3

Создано в 2019-05-07 пакетом представ. (v0.2.1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...