从R

时间:2018-12-10 21:46:57

标签: r

有人能指出我正确的方向吗?我有一个结果列表(下面的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)

3 个答案:

答案 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)