x <- list( factory = c('a','b','c','d'), cost = c(21,30,44,100))
x <- as.data.frame(x)
x <- x %>%
melt('cost','factory')
colnames(x) <- c('cost','client','type')
x <- x %>%
group_by(client)%>%
nest()
for (m in 1:4) {
if(m==1){
x$scene <- m
x2 <- x
}else{
x3 <- x
x3$scene <- m
x2 <- rbind(x2,x3)
}
}
x2 <- x2 %>%
group_by(scene) %>%
nest()
test <- function(df){
df$data %>%
mutate(increa = cost + 15)
}
x2$data%>%
map(test)
[[1]]
[[1]]$`factory`
[1] "a" "b" "c" "d"
[[1]]$cost
[1] 21 30 44 100
[[1]]$increa
[1] 36 45 59 115
[[2]]
[[2]]$`factory`
[1] "a" "b" "c" "d"
[[2]]$cost
[1] 21 30 44 100
[[2]]$increa
[1] 36 45 59 115
[[3]]
[[3]]$`factory`
[1] "a" "b" "c" "d"
[[3]]$cost
[1] 21 30 44 100
[[3]]$increa
[1] 36 45 59 115
[[4]]
[[4]]$`factory`
[1] "a" "b" "c" "d"
[[4]]$cost
[1] 21 30 44 100
[[4]]$increa
[1] 36 45 59 115
map(x2$data, function(df) map(df$data, function(df) df <- mutate(df,increa = cost + 15)))
为了得到您想要的输出,我认为首先提取您想要的信息级别,然后计算新列更容易。另一方面,如果您想要操作此结构中的数据并保留此结构,则需要嵌套调用map
和mutate
-
library(tidyverse)
第一个解决方案-提取信息,然后计算新列:
我们可以使用
map(x2$data, ~ .x$data)
# [[1]]
# [[1]][[1]]
# # A tibble: 4 x 2
# cost type
# <dbl> <chr>
# 1 21 a
# 2 30 b
# 3 44 c
# 4 100 d
#
#
# [[2]]
# [[2]][[1]]
# # A tibble: 4 x 2
# cost type
# <dbl> <chr>
# 1 21 a
# 2 30 b
# 3 44 c
# 4 100 d
#
# ...
由于这是一个嵌套列表结构,因此需要第二个map
来计算新列。在这里,mutate
-函数应用于每个嵌套数据条目,并附加了创建新列Inc的规范。
map(x2$data, ~ map(.x$data, mutate, inc = cost + 15))
# [[1]]
# [[1]][[1]]
# # A tibble: 4 x 3
# cost type inc
# <dbl> <chr> <dbl>
# 1 21 a 36
# 2 30 b 45
# 3 44 c 59
# 4 100 d 115
#
#
# [[2]]
# [[2]][[1]]
# # A tibble: 4 x 3
# cost type inc
# <dbl> <chr> <dbl>
# 1 21 a 36
# 2 30 b 45
# 3 44 c 59
# 4 100 d 115
#
# ...
test <- function(df){
mutate(df, increa = cost + 15)
}
map(x2$data, ~ map(.x$data, test))
x2_new <- x2 %>%
mutate(data = map(data, function(df1) mutate(df1, data = map(data, test))))
为了验证这是否有效,我们再次提取所需的信息,如下所示:
map(x2_new$data, ~ .x$data)
# [[1]]
# [[1]][[1]]
# # A tibble: 4 x 3
# cost type increa
# <dbl> <chr> <dbl>
# 1 21 a 36
# 2 30 b 45
# 3 44 c 59
# 4 100 d 115
#
#
# [[2]]
# [[2]][[1]]
# # A tibble: 4 x 3
# cost type increa
# <dbl> <chr> <dbl>
# 1 21 a 36
# 2 30 b 45
# 3 44 c 59
# 4 100 d 115
#
# ...
第三个解决方案-打破结构,但保留信息
这是我最喜欢的解决方案,因为它将数据转换为整洁的格式,并保留所有信息:
x2 %>%
unnest(data) %>%
unnest(data) %>%
mutate(inc = cost + 15)
# A tibble: 16 x 5
# scene client cost type inc
# <int> <fct> <dbl> <chr> <dbl>
# 1 1 factory 21 a 36
# 2 1 factory 30 b 45
# 3 1 factory 44 c 59
# 4 1 factory 100 d 115
# 5 2 factory 21 a 36
# 6 2 factory 30 b 45
# 7 2 factory 44 c 59
# 8 2 factory 100 d 115
# 9 3 factory 21 a 36
# 10 3 factory 30 b 45
# 11 3 factory 44 c 59
# 12 3 factory 100 d 115
# 13 4 factory 21 a 36
# 14 4 factory 30 b 45
# 15 4 factory 44 c 59
# 16 4 factory 100 d 115
数据
generic_data <- structure(
list(client = structure(1L, .Label = "factory", class = "factor"),
data = list(structure(list(cost = c(21, 30, 44, 100),
type = c("a", "b", "c", "d")),
row.names = c(NA, -4L),
class = c("tbl_df", "tbl", "data.frame")))),
row.names = c(NA, -1L), class = c("tbl_df", "tbl", "data.frame"))
x2 <- structure(
list(scene = 1:4,
data = list(generic_data, generic_data, generic_data, generic_data)),
row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame"))
考虑到类有三个字段name(String)、age(int)、salary(double)。 我想创建一个名为键,值为工资的映射(而不是对象本身),如果键不唯一,则使用linkedList保存所有重复键的值。 如何实现这种场景?
我尝试了这种方法,但得到了强制转换异常,不能将字符串转换为整数。
首先感谢大家抽出时间....我想让你知道我刚开始使用R我正在尝试用R来绘制我的坐标。我已经尝试过了不同的post an函数,其中一个我会添加它的,我有一个文件的坐标点覆盖了世界,我想在谷歌卫星地图中绘制它们?另外,我有API键,但我不知道如何在代码中添加它? 有谁能帮我继续做这件事吗? 我尝试过的另一种选择是: 当我运行它时,我在download.file(url,destfile=tmp,qui
我在一个类中有以下代码,它扩展了Primefaces的 在上面的过滤器是类型
我有一个实体 我想根据货币计算每个部门的金额,并将结果写在行中。例子: 结果:“莫斯科200美元,巴黎100美元,莫斯科200卢布” 对于it: 我收到一个结果: 但我不知道如何转换地图
我的 Spring Boot 应用程序中有 实体。它具有字段 ,其中包含: 对于我我有,字段称为。问题是:如何使用将字符串字段转换为中的Map?