R 是否有方法通过列表中的变量将不同的函数应用于嵌套列表?

R 是否有方法通过列表中的变量将不同的函数应用于嵌套列表?,r,R,我有一个嵌套列表 length_group <- rep(c(1:11), length.out = 1000) age_group <- rep(c(3:13), length.out = 1000) trip_group <- rep(c(1:6), length.out = 1000) vehicle <- rep(c(1:5), length.out = 1000) value <- c(1:1000) value <- sample(value, s

我有一个嵌套列表

length_group <- rep(c(1:11), length.out = 1000)
age_group <- rep(c(3:13), length.out = 1000)
trip_group <- rep(c(1:6), length.out = 1000)
vehicle <- rep(c(1:5), length.out = 1000)
value <- c(1:1000)
value <- sample(value, size = 10000, replace = TRUE)

df <- data.frame(length_group, age_group, trip_group, vehicle, value)

n_df <- df %>%
  group_by(length_group, age_group, trip_group) %>%
  nest()

length\u group由于您的行程组是一个整数,您可以执行以下操作:

MULT = c(0.9,0.45,0.5,0.8,0.7,1.0)
names(MULT) = 1:6

df %>% mutate(new_value = value * MULT[trip_group]) %>% head()

  length_group age_group trip_group vehicle value new_value
1            1         3          1       1   355    319.50
2            2         4          2       2   743    334.35
3            3         5          3       3   315    157.50
4            4         6          4       4   839    671.20
5            5         7          5       5   769    538.30
6            6         8          6       1   452    452.00
df %>% mutate(new_value = value * MULT[as.character(trip_group)]) %>% head()
如果您的trip_组为character等,您可以执行以下操作:

MULT = c(0.9,0.45,0.5,0.8,0.7,1.0)
names(MULT) = 1:6

df %>% mutate(new_value = value * MULT[trip_group]) %>% head()

  length_group age_group trip_group vehicle value new_value
1            1         3          1       1   355    319.50
2            2         4          2       2   743    334.35
3            3         5          3       3   315    157.50
4            4         6          4       4   839    671.20
5            5         7          5       5   769    538.30
6            6         8          6       1   452    452.00
df %>% mutate(new_value = value * MULT[as.character(trip_group)]) %>% head()

由于您的trip_组是一个整数,您可以执行以下操作:

MULT = c(0.9,0.45,0.5,0.8,0.7,1.0)
names(MULT) = 1:6

df %>% mutate(new_value = value * MULT[trip_group]) %>% head()

  length_group age_group trip_group vehicle value new_value
1            1         3          1       1   355    319.50
2            2         4          2       2   743    334.35
3            3         5          3       3   315    157.50
4            4         6          4       4   839    671.20
5            5         7          5       5   769    538.30
6            6         8          6       1   452    452.00
df %>% mutate(new_value = value * MULT[as.character(trip_group)]) %>% head()
如果您的trip_组为character等,您可以执行以下操作:

MULT = c(0.9,0.45,0.5,0.8,0.7,1.0)
names(MULT) = 1:6

df %>% mutate(new_value = value * MULT[trip_group]) %>% head()

  length_group age_group trip_group vehicle value new_value
1            1         3          1       1   355    319.50
2            2         4          2       2   743    334.35
3            3         5          3       3   315    157.50
4            4         6          4       4   839    671.20
5            5         7          5       5   769    538.30
6            6         8          6       1   452    452.00
df %>% mutate(new_value = value * MULT[as.character(trip_group)]) %>% head()
在base R中,您可以执行以下操作:

dat$value.mult <- dat$value * c(.9, .45, .5, .8, .7, 1)[factor(trip_group)]
head(dat)
#   length_group age_group trip_group vehicle value value.mult
# 1            1         3          1       1   993      893.7
# 2            2         4          2       2   694      312.3
# 3            3         5          3       3   437      218.5
# 4            4         6          4       4   203      162.4
# 5            5         7          5       5    71       49.7
# 6            6         8          6       1   746      746.0
dat$value.mult在基本R中,您可以执行以下操作:

dat$value.mult <- dat$value * c(.9, .45, .5, .8, .7, 1)[factor(trip_group)]
head(dat)
#   length_group age_group trip_group vehicle value value.mult
# 1            1         3          1       1   993      893.7
# 2            2         4          2       2   694      312.3
# 3            3         5          3       3   437      218.5
# 4            4         6          4       4   203      162.4
# 5            5         7          5       5    71       49.7
# 6            6         8          6       1   746      746.0
dat$value.mult