小编Nic*_*ick的帖子

将矢量列表转换为数据帧

我正在尝试将矢量列表(本质上是一个多维数组)转换为数据帧,但每次尝试我都会得到意想不到的结果.

我的目标是实例化一个空白列表,在for循环中填充它,其中包含有关循环迭代的信息的向量,然后在完成后将其转换为数据帧.

> vectorList <- list()
> for(i in  1:5){
+     vectorList[[i]] <- c("number" = i, "square root" = sqrt(i))
+ }
> vectorList
Run Code Online (Sandbox Code Playgroud)

输出:

> [[1]]
>      number square root 
>           1           1 
> 
> [[2]]
>      number square root 
>    2.000000    1.414214 
> 
> [[3]]
>      number square root 
>    3.000000    1.732051 
> 
> [[4]]
>      number square root 
>           4           2 
> 
> [[5]]
>      number square root 
>    5.000000    2.236068
Run Code Online (Sandbox Code Playgroud)

现在我希望这成为一个包含2个变量的5个观测值的数据框,但是试图从'vectorList'创建一个数据框

numbers <- data.frame(vectorList)
Run Code Online (Sandbox Code Playgroud)

结果是5个变量的2个观察结果.

奇怪的是它甚至不会被重塑(我知道这将是一个糟糕的工作,但我尝试过). …

r list vector dataframe

27
推荐指数
4
解决办法
2万
查看次数

R〜用户定义函数的向量化

我需要编写一个函数来计算工作日的数量(减去周末,以及其他本地银行假期的向量),但是我所遇到的问题仅通过计算工作日的数量就可以更简单地说明。

这是一个给出两个日期之间的工作日数的函数:

removeWeekends <- function(end, start){

  range <- as.Date(start:end, "1970-01-01")

  range<- range[sapply(range, function(x){
                                if(!chron::is.weekend(x)){
                                  return(TRUE)
                                }else{
                                  return(FALSE)
                                }
                              })]

  return(NROW(range))

}
Run Code Online (Sandbox Code Playgroud)

当给每个参数一个日期时,该方法有效:

removeWeekends(as.Date("2018-05-08"), as.Date("2018-06-08"))
#[1] 24
Run Code Online (Sandbox Code Playgroud)

但是,当它从数据帧中获得两个向量时,它将失败:

one <- as.Date("2017-01-01"):as.Date("2017-01-08")
two <- as.Date("2018-06-08"):as.Date("2018-06-15")
df <- data.frame(one, two)
removeWeekends(df$two, df$one)
#[1] 375
#Warning messages:
#1: In start:end : numerical expression has 8 elements: only the first used
#2: In start:end : numerical expression has 8 elements: only the first used
Run Code Online (Sandbox Code Playgroud)

我也试过了(我猜这不会起作用,因为语法似乎不正确):

lapply(df, removeWeekends, df$two, df$one)
#Error in FUN(X[[i]], ...) : unused …
Run Code Online (Sandbox Code Playgroud)

r function vector vectorization dataframe

5
推荐指数
1
解决办法
955
查看次数

R tidyverse 表演示

当涉及到输出表格时,我正在将统计分析脚本从 SPSS 转换为 R,尽管我不断遇到问题。我最近开始使用 tidyverse 包,因此理想地希望找到一个与之兼容的解决方案,但更一般地说,如果有这样的事情,我希望有人指出对R进行一些深入的表培训。

无论如何......这是我想要复制的表格布局:

在此输入图像描述

本质上它是一个频率

这是一些示例数据的一些脚本:

i <- c(201:301)
ID <- sample(i, 200, replace=TRUE)
i <- 1:2
Category1 <- sample(i, 200, replace=TRUE)
Category2 <- sample(i, 200, replace=TRUE)
Category3 <- sample(i, 200, replace=TRUE)
df <- data.frame(ID, Category1, Category2, Category3)
Run Code Online (Sandbox Code Playgroud)

现在我已经尝试过这个:

IDTab <- df %>%
            mutate(ID = as.character(ID)) %>%
            group_by(ID) %>%
            summarise(C1_1 = NROW(Category1[which(Category1 == 1)])
                     ,C1_2 = NROW(Category1[which(Category1 == 2)])
                     ,C1_T = NROW(Category1)
                     ,C2_1 = NROW(Category2[which(Category2 == 1)])
                     ,C2_2 = NROW(Category2[which(Category2 == 2)])
                     ,C2_T = NROW(Category2)
                     ,C3_1 …
Run Code Online (Sandbox Code Playgroud)

r tidyverse

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

标签 统计

r ×3

dataframe ×2

vector ×2

function ×1

list ×1

tidyverse ×1

vectorization ×1