小编Tho*_*ing的帖子

查找嵌套列表的哪些元素是数据框

假设我有一个如下所示的嵌套列表

\n
test <- 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"\n
Run Code Online (Sandbox Code Playgroud)\n

我想知道这个嵌套列表中字符元素的位置。在这种情况下,我想返回一个命名向量或命名列表,其中TRUE元素是否为字符,FALSE否则返回。

\n

我可以用 来做到这一点rapply,它会取消列出所有内容:

\n
rapply(test, is.character)\n#>   a.x     b   c.d c.e.y …
Run Code Online (Sandbox Code Playgroud)

r nested-lists

3
推荐指数
1
解决办法
73
查看次数

如何从R中的字符串数组中获取平均值?

我有这个字符串变量。

x <- "[2,3,3,5]"

我想得到这个的平均值。我怎样才能在 R 上实现这一目标?

string r

3
推荐指数
1
解决办法
85
查看次数

根据另一个数据帧的两个日期汇总行值

这是我的数据:

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 …

merge aggregate r data.table

3
推荐指数
1
解决办法
118
查看次数

获取每个组的所有级别组合

我有一个客户 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)

expand combinations r

3
推荐指数
1
解决办法
76
查看次数

R - 计算两个椭圆之间的重叠

首先,是的,之前也有人问过类似的问题。然而,它们都源于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)

在此输入图像描述

鉴于此设置,我如何计算重叠面积?

r graph

3
推荐指数
1
解决办法
276
查看次数

如何在 R 中连续连接整数向量

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)

r vector

3
推荐指数
1
解决办法
91
查看次数

是否有用于布尔运算的内置“并行”函数?

我正在寻找一个类似于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是一个别名,`&`因此只接受两个向量(我想避免在我的代码中包含额外的依赖项)。

boolean r function logical-operators

3
推荐指数
1
解决办法
101
查看次数

cumsum() 从最后一个条目开始并向后移动

我想从最后一个值计算数字向量的累积总和并向后移动。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 函数可以直接计算?

r cumsum

2
推荐指数
2
解决办法
64
查看次数

converting numeric arrays into list and savig in CSV in 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

最终的 CSV

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)

csv arrays r

2
推荐指数
1
解决办法
40
查看次数

在 R/list 中如何合并/rbind 子数据帧

有列表ori_list,如何组合子数据框cat_a|cat_btocatitem_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)

r list dataframe

2
推荐指数
1
解决办法
59
查看次数