有人能指出我正确的方向吗?我有一个结果列表(下面的df2),我想用这些结果从矩阵(下面的df)中查找值。
df <- read.table(text="Date Team1 Team2 Team3 Team4 Team5 Team6
25-Sep-18 17 9 11 14 19 9
24-Sep-18 18 3 2 19 16 5
21-Sep-18 15 11 4 11 9 5
20-Sep-18 1 12 13 18 11 2
19-Sep-18 10 5 6 16 16 13
18-Sep-18 1 13 1 18 5 2
17-Sep-18 16 3 1 13 18 11
14-Sep-18 6 9 18 17 17 1
13-Sep-18 8 4 19 17 4 10
12-Sep-18 6 13 14 6 12 14
11-Sep-18 15 7 9 12 4 3
10-Sep-18 3 11 11 2 5 19
7-Sep-18 1 17 13 9 18 1", header=TRUE)
df2 <- read.table(text="24-Sep-18 Team1
14-Sep-18 Team2
10-Sep-18 Team3
21-Sep-18 Team4
20-Sep-18 Team5
7-Sep-18 Team6", header=FALSE)
除了使用某种循环在df2中循环并为搜索df分配坐标外,还有更好的方法使用df2中的输入从df中找到结果吗?
我正在努力寻找所有相关内容(尽管我确定有)-我怀疑我不知道要搜索的正确字符串。
我正在尝试创建以下内容:
results <- read.table(text="24-Sep-18 Team1 18
14-Sep-18 Team2 9
10-Sep-18 Team3 11
21-Sep-18 Team4 19
20-Sep-18 Team5 11
7-Sep-18 Team6 1", header=FALSE)
答案 0 :(得分:2)
这是一种base R
的方式
mat <- cbind(match(df2$V1, df$Date), match(df2$V2, names(df)))
df2$results <- df1[mat]
df2
# V1 V2 results
#1 24-Sep-18 Team1 18
#2 14-Sep-18 Team2 9
#3 10-Sep-18 Team3 11
#4 21-Sep-18 Team4 11 # your expected seems to be wrong here
#5 20-Sep-18 Team5 11
#6 7-Sep-18 Team6 1
这个想法是使用矩阵为df
子集,每个矩阵每个维度都有一列-第一列是行索引,第二列是列号。
答案 1 :(得分:2)
我们需要从df中gather
的“团队”列中将它们变成行,然后才能与df2合并。
library(tidyverse)
df %>%
gather(contains("Team"), key = Team, value = Value) %>%
inner_join(df2, by = c("Date" = "V1", "Team" = "V2"))
Date Team Value
1 24-Sep-18 Team1 18
2 14-Sep-18 Team2 9
3 10-Sep-18 Team3 11
4 21-Sep-18 Team4 11
5 20-Sep-18 Team5 11
6 7-Sep-18 Team6 1
答案 2 :(得分:1)
这也应该有所帮助。熔化两个表的内部联接,并在第二个变量匹配的地方进行过滤。
test <- df2 %>% inner_join(df,by=c("V1"="Date"))
results <- reshape2::melt(test) %>% filter(V2 == variable)