假设我有一个如下所示的嵌套列表
\ntest <- list(\n a = data.frame(x = 1),\n b = "foo",\n c = list(\n d = 1:5,\n e = data.frame(y = 1),\n f = "a",\n list(g = "hello")\n )\n)\ntest\n#> $a\n#> x\n#> 1 1\n#> \n#> $b\n#> [1] "foo"\n#> \n#> $c\n#> $c$d\n#> [1] 1 2 3 4 5\n#> \n#> $c$e\n#> y\n#> 1 1\n#> \n#> $c$f\n#> [1] "a"\n#> \n#> $c[[4]]\n#> $c[[4]]$g\n#> [1] "hello"\nRun Code Online (Sandbox Code Playgroud)\n我想知道这个嵌套列表中字符元素的位置。在这种情况下,我想返回一个命名向量或命名列表,其中TRUE元素是否为字符,FALSE否则返回。
我可以用 来做到这一点rapply,它会取消列出所有内容:
rapply(test, is.character)\n#> a.x b c.d c.e.y …Run Code Online (Sandbox Code Playgroud) 我有这个字符串变量。
x <- "[2,3,3,5]"
我想得到这个的平均值。我怎样才能在 R 上实现这一目标?
这是我的数据:
df1 <- fread('
id , date1 , date2
id_0001 , 2017-01-01, 2017-01-05
id_0002 , 2017-01-02, 2017-01-08
id_0003 , 2017-01-04, 2017-01-07
')
df2<- fread('
date , value
2017-01-01, 1
2017-01-02, 2
2017-01-03, 5
2017-01-04, 5
2017-01-05, 5
2017-01-06, 3
2017-01-07, 4
2017-01-08, 7
2017-01-09, 5
2017-01-10, 1
2017-01-11, 5
')
Run Code Online (Sandbox Code Playgroud)
我想总结(获取平均值)每个from在 rowwise和之间的范围内的valuefrom 。df2iddf1date1date2
结果是这样的:
| ID | 日期1 | 日期2 | 价值 |
|---|---|---|---|
| id_0001 | 2017-01-01 | 2017-01-05 | mean(c(1,2,5,5,5)) |
| id_0002 | 2017-01-02 | 2017-01-08 | mean(c(2,5,5,5,3,4,7)) |
| id_0003 | 2017-01-04 | 2017-01-07 | mean(c(5,5,3,4)) |
我知道我可以扩展idby …
我有一个客户 ID 列表,每个 ID 都有他们使用的独特产品的列表。理论上最多可以有约 150 种独特的产品。
df <- tibble(ID = c(1,1,1,2,2,3,3,4),
prod = c("Prod1", "Prod2", "Prod3", "Prod1", "Prod4", "Prod3", "Prod5", "Prod2"))
Run Code Online (Sandbox Code Playgroud)
由此,我需要获取每个 ID 的所有可能的产品组合,而不仅仅是最高级别(按 ID 分组)。也就是说,包括所有产品的组合(如 Expand_grid() 所做的那样),但也包括1,...,n 个元素的所有组合,其中n是 ID 具有的唯一产品的数量。
因此,最终数据集应如下所示:
df_results <- tibble(ID = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4),
combo = c("Prod1", "Prod2", "Prod3", "Prod1|Prod2", "Prod1|Prod3", "Prod2|Prod3", "Prod1|Prod2|Prod3",
"Prod1", "Prod4", "Prod1|Prod4",
"Prod3", "Prod5", "Prod3|Prod5",
"Prod2"))
Run Code Online (Sandbox Code Playgroud) 首先,是的,之前也有人问过类似的问题。然而,它们都源于PCA或一些专门的包;从这些人在问题中提供的数据中可以看出,这些数据与我拥有的情况不符,我无法使用它。
我有一个数据集,其中包含质心、长轴和短轴以及椭圆的角度。这是一个非常小的例子:
data <- data.frame(x0 = c(0, 0), y0 = c(0, 0), a = c(5, 3), b = c(10, 20), angle = c(45, 35), Ellipse = c("Ell1", "Ell2"))
Run Code Online (Sandbox Code Playgroud)
数据框:
x0 y0 a b angle Ellipse
1 0 0 5 10 45 Ell1
2 0 0 3 20 35 Ell2
Run Code Online (Sandbox Code Playgroud)
我还以视觉方式显示它,只是为了教学目的(我不需要绘制重叠区域):
library(ggplot2)
library(ggforce)
ggplot(data, aes(x0 = x0,
y0 = y0,
a = a,
b = b,
angle = angle,
color = Ellipse)) +
geom_ellipse()
Run Code Online (Sandbox Code Playgroud)
鉴于此设置,我如何计算重叠面积?
vec <- c(1, 3, 2, 37)
Run Code Online (Sandbox Code Playgroud)
我想连续连接这个向量,使得输出看起来像这样:
> output
[[1]]
[1] 1
[[2]]
[1] 1 3
[[3]]
[1] 1 3 2
[[4]]
[1] 1 3 2 37
Run Code Online (Sandbox Code Playgroud)
我编写了一个函数来执行此操作,但它没有给我正确的输出:
myfun <- function(vec){
output = vector("list", length(vec))
output[[1]] = vec[1]
for(i in 2:length(vec)){
output[[i]] = paste(output[[i - 1]], vec[i])
output[[i]] = as.numeric(strsplit(output[[i]], " ")[[1]])
}
return(output)
}
> myfun(c(1, 3, 2, 37))
[[1]]
[1] 1
[[2]]
[1] 1 3
[[3]]
[1] 1 2
[[4]]
[1] 1 37
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个类似于pmaxandpmin但用于布尔运算的函数。
例如:
parallel_and(
c(TRUE, TRUE, TRUE, TRUE),
c(TRUE, TRUE, TRUE, FALSE),
c(TRUE, TRUE, FALSE, TRUE),
c(TRUE, FALSE, TRUE, TRUE)
)
Run Code Online (Sandbox Code Playgroud)
预期输出为:
# [1] TRUE FALSE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)
magrittr::and是一个别名,`&`因此只接受两个向量(我想避免在我的代码中包含额外的依赖项)。
我想从最后一个值计算数字向量的累积总和并向后移动。cumsum()R 中的标准函数通常从第一个值开始并向前移动,就像简单的例子一样 -
cumsum(1:5)
## 1 3 6 10 15
Run Code Online (Sandbox Code Playgroud)
但我想要这样的结果 -
15, 14, 12, 9, 5
Run Code Online (Sandbox Code Playgroud)
是否有任何 R 函数可以直接计算?
I am trying to store two numerical arrays in an unusal form, e.g. c('[1;2;3]','[4;5;6]','[24;25;26]')
I need them in a CSV in single cells, like here

So far I tried this:
DF
ID time Y
1 3 23
1 4 24
1 5 20
2 2 12
2 8 15
3 2 19
3 3 23
3 5 21
3 6 32
timeList = list()
yList = list()
for (i in 1:3) {
timeList[i] = DF$time
yList[i] = DF$Y
}
longTimeList …Run Code Online (Sandbox Code Playgroud) 有列表ori_list,如何组合子数据框cat_a|cat_btocat和item_a|item_bto item?(结果与 new_list 相同)
cat_a <- data.frame(name=c('A','B','C'),amount=c(1,2,3))
cat_b <- data.frame(name=c('w','B','C'),amount=c(4,2,3))
item_a <- data.frame(name=c('z','o','C'),amount=c(3,4,1))
item_b <- data.frame(name=c('n','B','C'),amount=c(6,6,3))
files <- ls(pattern = 'cat|item') %>% purrr::set_names()
ori_list <- list(mget(files))
new_list <- list(cat= data.frame(name = c('A','B','C','w','B','C'),
amount = c(1,2,3,4,2,3)),
item = data.frame(name=c('z','o','C','n','B','C'),
amount=c(3,4,1,6,6,3)))
Run Code Online (Sandbox Code Playgroud)