小编Sot*_*tos的帖子

按组滚动方式

我正在尝试对分组 ( dplyr::group_by) 的数据进行滚动意味着 - 我无法理解为什么这不起作用的原因:

set.seed(1)
library(dplyr)
library(zoo)
df <- data.frame(a=sample(LETTERS[1:2], replace= T, 10),
                 b=rnorm(20), stringsAsFactors = F)
df %>% 
  group_by(a) %>% 
  mutate(rollapply(b, 3, mean))
Run Code Online (Sandbox Code Playgroud)

我可以看到这里可以找到一个冗长的解决方案,但想知道为什么上面的方法不起作用

r mean zoo dplyr

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

将两个相同大小的数据框依次合并为一列

我有两个大小相同的数据集 [132,450000]。一个具有值,另一个具有对应于这些值的 p 值。现在我想合并这两个数据集,以便我有 1 个大数据框 [264,450000],其中包含带有值的列,后跟带有相应 p 值的列。行名完全相同,列名类似于:df1 中的 sample1 和 df2 中的 sample1_pval

例如我有两个像这样的数据框

> df1
    x y
cg1 1 a
cg2 2 b
cg3 3 c
cg4 4 d
cg5 5 e

> df2
     x_pval y_pval 
cg1   6      f
cg2   7      g
cg3   8      h
cg4   9      i
cg5  10      j
Run Code Online (Sandbox Code Playgroud)

我想用这个顺序合并它们:df1 的第一列,然后是 df2 的第一列,然后是 df1 的第二列,然后是 df2 的第二列等等......

那么它看起来像这样:

> df
           x       x_pval    y        y_pval
cg1        1        6        a        f
cg2        2        7        b        g
cg3 …
Run Code Online (Sandbox Code Playgroud)

r dataframe cbind

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

如何提取列表中的第一项(即使列表为空)

在 R 中,我想从嵌套列表中提取第一项;但有时该列表可能为空。

例如:

myList <- list(
            list(ID = 1, Sales = 1000, Product = "Car"),
            list(ID = 2, Sales = 2000, Product = "Boat"),
            list(ID = 3, Sales = 1500, Product = "Bike")
)
myList2 <- list()
Run Code Online (Sandbox Code Playgroud)

所以当我拨打以下电话时:

myList[[1]]
myList2[[1]]
Run Code Online (Sandbox Code Playgroud)

第一个调用返回一个有效的子列表(ID=1, Sales=1000, Product = "Car"),但第二个调用返回一个错误 -

Error in myList2[[1]] : subscript out of bounds

是否有一个简单的调用可以表示“填充列表时返回项目 1,否则返回NULL并且不抛出错误”?

r

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

如何使用dplyr获得多个变量的pmax?

在有人将此问题标记为重复之前,我已经看到过这个问题了,它不能解决我的问题。如果我尝试

mtcars %>% mutate(new = rowMeans(select(.,c(1,7)), na.rm = TRUE))
Run Code Online (Sandbox Code Playgroud)

它很好地工作,但是如果我用pmax而不是这样做rowMeans

mtcars %>% mutate(new = pmax(select(.,c(1,7)), na.rm = TRUE))
Run Code Online (Sandbox Code Playgroud)

我懂了

Error: Column `new` is of unsupported class data.frame
Run Code Online (Sandbox Code Playgroud)

为什么?在这个例子中,我可以得到输出

mtcars %>% mutate(new = pmax(mpg,qsec,carb,na.rm = TRUE))
Run Code Online (Sandbox Code Playgroud)

但是我尝试使用它,select因为我需要一些真实的数据select helper或由列位置确定的变量(例如1,7在示例中),否则我也会出错。

如链接问题的答案中所建议,我也尝试使用do.call获取错误。

谢谢!

r dplyr

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

在数据框UP的单列中移动值,并在另一列中指定滞后

我想将来自不同国家/地区的价格调整到一个时区,这意味着将一列向上移动在另一列中声明的滞后时间(移动是时差)。

使用这样的示例数据:

example=data.frame(country=c("IT","IT","GR","GR","GR","TR","TR","TR","TR"), 
                   price=c(200,150,300,480,590,638,237,438,555), 
                   shift=c(0,0,1,1,1,2,2,2,2))
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

        country   price   shift
        IT        200     0
        IT        150     0
        GR        300     1
        GR        480     1
        GR        590     1
        TR        638     2
        TR        237     2
        TR        438     2
        TR        555     2
Run Code Online (Sandbox Code Playgroud)

我想得到以下结果:

        country   price   shift
        IT        200     0
        IT        150     0
        GR        480     1
        GR        590     1
        GR        NA      1
        TR        438     2
        TR        555     2
        TR        NA      2
        TR        NA      2
Run Code Online (Sandbox Code Playgroud)

我试图从此线程使用一种解决方案: R:在数据帧UP的单列中移动值, 但由于它使用一个滞后值,因此并不完全适用。

r dataframe

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

按组计算具有某些值的数据表中的行

我有一个看起来像这样的数据表:

Property    Type
1           apartment
1           office
2           office
2           office
3           apartment
3           apartment
3           office
Run Code Online (Sandbox Code Playgroud)

我现在想按财产计算办公室和公寓:

Property    Type       number_of_offices    number_of_apartments
       1    apartment                  1                       1
       1    office                     1                       1
       2    office                     2                       0
       2    office                     2                       0
       3    apartment                  1                       2
       3    apartment                  1                       2
       3    office                     1                       2
Run Code Online (Sandbox Code Playgroud)

我试过

my.DT <- myDT[,.(Type=Type, number_of_offices=nrow(my.DT[my.DT$Type=="office",]), number_of_apartments=nrow(my.DT$Type=="apparment",], by="Property")
Run Code Online (Sandbox Code Playgroud)

但是,这只给了我整个数据表的总数。有没有人有办法解决吗?

r data.table

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

每组可视化每天的摘要统计信息

假设以下数据框,

head(df, 9)
         Day               variable     value
1 2015-10-18   Number_Flows.minimum  401.0000
2 2015-10-18   Number_Flows.maximum 2068.0000
3 2015-10-18   Number_Flows.average 1578.9474
4 2015-10-18 Number_srcaddr.minimum   95.0000
5 2015-10-18 Number_srcaddr.maximum  292.0000
6 2015-10-18 Number_srcaddr.average  222.6316
7 2015-10-18 Number_dstaddr.minimum   65.0000
8 2015-10-18 Number_dstaddr.maximum  411.0000
9 2015-10-18 Number_dstaddr.average  202.5789
Run Code Online (Sandbox Code Playgroud)

我想要做的就是情节minimum,maximum,average每个Number_Flows,Number_srcaddr等我宁愿有条显示的价值,但我打开其他的方法为好,只要我得到(例如,对于贴在下面重复的例子)共22张图表(每天11张).

我尝试了各种各样的东西但没有运气

library(dplyr)
library(ggplot2)


ggplot(df %>% mutate(group = paste(Day, gsub('\\..*', '', variable), sep = '-')), aes(x = Day, y = value))+geom_bar(stat = 'identity')+facet_wrap(~group)
ggplot(df %>% mutate(group = paste(Day, …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

Dummify字符列并查找唯一值

我有一个具有以下结构的数据帧

test <- data.frame(col = c('a; ff; cc; rr;', 'rr; a; cc; e;'))
Run Code Online (Sandbox Code Playgroud)

现在我想从中创建一个数据帧,其中包含测试数据帧中每个唯一值的命名列.唯一值是以';'结尾的值 角色,从空间开始,不包括空间.然后,对于列中的每一行,我希望用1或0填充虚拟列.如下所示

data.frame(a = c(1,1), ff = c(1,0), cc = c(1,1), rr = c(1,0), e = c(0,1))

  a ff cc rr e
1 1  1  1  1 0
2 1  0  1  1 1
Run Code Online (Sandbox Code Playgroud)

我尝试使用for循环和列中的唯一值创建一个df,但它变得很乱.我有一个可用的向量,包含列的唯一值.问题是如何创建1和0.我尝试了一些mutate_all()功能,grep()但这没用.

r dummy-variable

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

将向量的每个元素添加到另一个向量

我有2个向量

x <- c(2,2,5)
y <- c(1,2)
Run Code Online (Sandbox Code Playgroud)

我想将向量的每个元素组合在一起得到

[1] 3 3 6 4 4 7
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

r vector add

4
推荐指数
1
解决办法
522
查看次数

如何返回满足特定条件的向量中的最后一个值

我有一个向量(在数据框中)充满了越来越多的数字.我想找到所有连续的数字,并用系列中的第一个数字替换它们.这可能没有循环吗?

我的输入数据是:

V1
1
4
5
7
10
15
16
17
20
Run Code Online (Sandbox Code Playgroud)

我想输出的是:

V1    Out
1     1
4     4
5     4
7     7
10    10
15    15
16    15
17    15
20    20
Run Code Online (Sandbox Code Playgroud)

到目前为止,我设法使用diff()计算两行之间的差异,并通过向量循环来替换正确的值.

V1 <- c(1, 4, 5, 7, 10, 15, 16, 17, 20)
df <- data.frame(V1)
df$diff <- c(0, diff(df$V1) == 1)
df$Out <- NA
for (j in 1:(nrow(df))){
    if (df$diff[j] == 0){
        df$Out[j] <- df$V1[j]
    } else {
        df$Out[j] <- df$V1[max(which(df$diff[1:j] == 0))]
    }
}
Run Code Online (Sandbox Code Playgroud)

它完成了这项工作,但效率非常低.有没有办法摆脱循环并使这段代码快速?

非常感谢你!

r

4
推荐指数
3
解决办法
129
查看次数

标签 统计

r ×10

dataframe ×2

dplyr ×2

add ×1

cbind ×1

data.table ×1

dummy-variable ×1

ggplot2 ×1

mean ×1

vector ×1

zoo ×1