R:带有列表的不同函数
R: distinct function with a list
我想将 distinct
函数应用于许多变量。所以假设我有数据框……
df <- data.frame(
id = c(1,1,1,2,3,3),
`sitting position` = c("A","B","A","A","B","B"),
`movement haed` = c("left", "left", "right", "right", "left", "left"),
`colesterol level` = c(50, 30, 45, 80, 90, 130),
check.names = FALSE)
…现在我将这些变量放在一个列表中,我想为其应用不同的函数(我的数据框中有更多变量)。假设这是列表:
columns <- dput(colnames(df))[-3]
Output:
c("id", "sitting position", "colesterol level"
)
有没有办法直接将 columns
与 distinct
函数一起应用(类似于 distinct(df, columns)
,不幸的是,它不起作用)?或者我总是必须一个一个地输入变量,比如
df_new <- distinct(df, id, `sitting position`, `colesterol level`)
Output:
df_new
id sitting position colesterol level
1 1 A 50
2 1 B 30
3 1 A 45
4 2 A 80
5 3 B 90
6 3 B 130
>
这确实有效,但会花费太多时间。如果我直接应用 columns
,我总是会收到一条错误消息,我真的不知道如何解决这个问题。
非常感谢您的帮助!
我们可以在这里利用tidyverse
的distinct_all
。此函数的优点在于您可以使用 .funs
参数进一步指定应包含哪些变量。因为 *_all
是 superseded,所以我包含了一个 across
版本。
library(dplyr)
# using the columns variable
df %>%
distinct(across(all_of(columns)))
id sitting position colesterol level
1 1 A 50
2 1 B 30
3 1 A 45
4 2 A 80
5 3 B 90
6 3 B 130
dplyr::distinct_all(df)
#or
df %>%
distinct(across(.cols = everything()))
id sitting position movement haed colesterol level
1 1 A left 50
2 1 B left 30
3 1 A right 45
4 2 A right 80
5 3 B left 90
6 3 B left 130
或者如果你想select某些变量
df %>%
distinct_all() %>%
select(id, `sitting position`, `colesterol level`)
id sitting position colesterol level
1 1 A 50
2 1 B 30
3 1 A 45
4 2 A 80
5 3 B 90
6 3 B 130
我想将 distinct
函数应用于许多变量。所以假设我有数据框……
df <- data.frame(
id = c(1,1,1,2,3,3),
`sitting position` = c("A","B","A","A","B","B"),
`movement haed` = c("left", "left", "right", "right", "left", "left"),
`colesterol level` = c(50, 30, 45, 80, 90, 130),
check.names = FALSE)
…现在我将这些变量放在一个列表中,我想为其应用不同的函数(我的数据框中有更多变量)。假设这是列表:
columns <- dput(colnames(df))[-3]
Output:
c("id", "sitting position", "colesterol level"
)
有没有办法直接将 columns
与 distinct
函数一起应用(类似于 distinct(df, columns)
,不幸的是,它不起作用)?或者我总是必须一个一个地输入变量,比如
df_new <- distinct(df, id, `sitting position`, `colesterol level`)
Output:
df_new
id sitting position colesterol level
1 1 A 50
2 1 B 30
3 1 A 45
4 2 A 80
5 3 B 90
6 3 B 130
>
这确实有效,但会花费太多时间。如果我直接应用 columns
,我总是会收到一条错误消息,我真的不知道如何解决这个问题。
非常感谢您的帮助!
我们可以在这里利用tidyverse
的distinct_all
。此函数的优点在于您可以使用 .funs
参数进一步指定应包含哪些变量。因为 *_all
是 superseded,所以我包含了一个 across
版本。
library(dplyr)
# using the columns variable
df %>%
distinct(across(all_of(columns)))
id sitting position colesterol level
1 1 A 50
2 1 B 30
3 1 A 45
4 2 A 80
5 3 B 90
6 3 B 130
dplyr::distinct_all(df)
#or
df %>%
distinct(across(.cols = everything()))
id sitting position movement haed colesterol level
1 1 A left 50
2 1 B left 30
3 1 A right 45
4 2 A right 80
5 3 B left 90
6 3 B left 130
或者如果你想select某些变量
df %>%
distinct_all() %>%
select(id, `sitting position`, `colesterol level`)
id sitting position colesterol level
1 1 A 50
2 1 B 30
3 1 A 45
4 2 A 80
5 3 B 90
6 3 B 130