我想创建一个如下所示的小标题:
# A tibble: 3 x 4
team arsenal chelsea spurs
<chr> <chr> <chr> <chr>
1 arsenal self london north-london
2 chelsea london self london
3 spurs north-london london self
如您所见,小标题中的信息是重复的。沿第一行阅读(团队=阿森纳),我们可以看到“阿森纳”和“马刺”之间有一个“北伦敦”德比。同样,沿着第三行(team = spurs)阅读,在“ spurs”和“ arsenal”之间有一个“ north-london” derby。
我们将此称呼为df_derbies
。我用以下代码创建了它:
library(tidyverse)
## create vectors
team <- c("arsenal", "chelsea", "spurs")
arsenal <- c("self", "london", "north-london")
chelsea <- c("london", "self", "london")
spurs <- c("north-london", "london", "self")
## combine vectors into dataframe
df_derbies <- tibble(team, arsenal, chelsea, spurs)
df_derbies
我的问题是双重的:
1)是否有一种方法可以创建初始向量,从而使我不必键入重复的信息?这将意味着我只需要键入一次“ north-london”即可。
2)第一步之后,有没有一个函数可以创建上述的小标题?这实际上将复制行和列的相关组合的信息。
这样做的原因是我想创建一个更大的小标题,最多20行。我愿意提出更好的方法来创建和组合向量的建议!
答案 0 :(得分:1)
您可以使用矩阵并使用基本R的upper.tri
和lower.tri
函数,如下所示:
## create vectors
team <- c("arsenal", "chelsea", "spurs")
arsenal <- c("self", "london", "north-london")
chelsea <- c("", "self", "london")
spurs <- c("", "", "self")
## combine vectors into dataframe
df_derbies <- rbind(arsenal, chelsea, spurs)
rownames(df_derbies) <- c("arsenal", "chelsea", "spurs")
colnames(df_derbies) <- c("arsenal", "chelsea", "spurs")
df_derbies[lower.tri(df_derbies)] <- df_derbies[upper.tri(df_derbies)]
答案 1 :(得分:1)
为避免键入重复信息,您将需要首先使用矩阵,然后将矩阵转换为小标题。这是一种方法:
library(tibble)
teams <- c("arsenal", "chelsea", "spurs")
derbies <- c("london", "north-london", "london")
mx <- matrix("self", length(teams), length(teams))
mx[lower.tri(mx)] <- mx[upper.tri(mx)] <- derbies
df_derbies <- as_tibble(cbind(teams, mx), .name_repair = function(x) c("teams", teams))