我正在尝试对分组 ( 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)
我可以看到这里可以找到一个冗长的解决方案,但想知道为什么上面的方法不起作用
我有两个大小相同的数据集 [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 中,我想从嵌套列表中提取第一项;但有时该列表可能为空。
例如:
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并且不抛出错误”?
在有人将此问题标记为重复之前,我已经看到过这个问题了,它不能解决我的问题。如果我尝试
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获取错误。
谢谢!
我想将来自不同国家/地区的价格调整到一个时区,这意味着将一列向上移动在另一列中声明的滞后时间(移动是时差)。
使用这样的示例数据:
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的单列中移动值, 但由于它使用一个滞后值,因此并不完全适用。
我有一个看起来像这样的数据表:
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)
但是,这只给了我整个数据表的总数。有没有人有办法解决吗?
假设以下数据框,
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) 我有一个具有以下结构的数据帧
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()但这没用.
我有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)
我怎样才能做到这一点?
我有一个向量(在数据框中)充满了越来越多的数字.我想找到所有连续的数字,并用系列中的第一个数字替换它们.这可能没有循环吗?
我的输入数据是:
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)
它完成了这项工作,但效率非常低.有没有办法摆脱循环并使这段代码快速?
非常感谢你!