我有一个data.frame,我想用一列相对于其他列(框架中也有一些非数字列)来计算相关系数。
ddply(Banks,.(brand_id,standard.quarter),function(x) { cor(BLY11,x) })
# Error in cor(BLY11, x) : 'y' must be numeric
Run Code Online (Sandbox Code Playgroud)
我针对is.numeric(x)进行了测试
ddply(Banks,.(brand_id,standard.quarter),function(x) { if is.numeric(x) cor(BLY11,x) else 0 })
Run Code Online (Sandbox Code Playgroud)
但是每次比较都失败,返回0,仅返回一列,就好像它仅被调用过一次一样。什么传递给该函数?刚来到R,我认为我缺少一些基本知识。
谢谢
我有一个类似的问题,就像这里已经讨论过的一样: Novisible绑定for全局变量Note in R CMD check
就我而言,我在自己的包中使用 ddply 函数,当我检查 R 包时,我得到一条注释:“全局变量‘VARX’没有可见的绑定。
所寻址的代码行是:
subsample <- ddply(my_data, .(VARX), function(x){x[sample(nrow(x), 1), ]})
Run Code Online (Sandbox Code Playgroud)
变量 VARX 是包 (sysdata) 提供的数据帧中的一列。改进代码以获得适当的 R 包的良好做法是什么?
我有一个包含三个变量(ACC和类型和ID)的数据框,其中ACC指的是决策的准确性,类型是指30种不同的决策类型,对于参与者的每种决策类型重复15次,ID指的是对参与者.它看起来像这样:
ID ACC Type
1 1 1
1 0 3
1 1 10
etc...
2 1 5
2 0 13
2 0 11
etc...
Run Code Online (Sandbox Code Playgroud)
我的目标是分析参与者中每种决策类型的准确性,并将数据合并到数据框中.如:
ID ACC_Type1 ACC_Type2 […] ACC_Type30
1 70 65 87
2 65 50 90
etc...
Run Code Online (Sandbox Code Playgroud)
到目前为止,我能够通过单独分组决策类型来计算,但是,我正在寻找一种更智能的方法来避免单独键入决策类型值:
library(data.table)
library(plyr)
dt <- data.table(d,key="Type")
dt_Type1<-data.frame (aggregate(ACC~ID,data=subset(dt,Type==1),mean))
dt_Type2<-data.frame (aggregate(ACC~ID,data=subset(dt,Type==2),mean))
[]
dt_Type30<-data.frame (aggregate(ACC~ID,data=subset(dt,Type==30),mean))
total <- merge(dt_Type1,dt_Type2 […] Type30,by="ID")
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!
我刚刚开始在 R 中使用 foreach 和 %dopar% 方法进行并行处理,但是我得到的结果令人困惑,并且与 for 循环不同;这是我用来测试这些方法和得到的结果的代码:
library(plyr); library(doParallel); library(foreach)
cs <- makeCluster(2)
registerDoParallel(cs)
sfor_start <- Sys.time()
s_for=as.numeric()
for (i in 1:1000) {
s_for[i] = sqrt(i)
}
print(Sys.time() - sfor_start)
sdopar_start <- Sys.time()
sdopar=as.numeric()
foreach(k=1:1000) %dopar% {
sdopar[k] = sqrt(k)
}
print(Sys.time() - sdopar_start)
Run Code Online (Sandbox Code Playgroud)
结果如下:
> s_for[1:10]; sdopar[1:10]
[1] 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 2.645751 2.828427 3.000000 3.162278
[1] NA NA NA NA NA NA NA NA NA NA
Run Code Online (Sandbox Code Playgroud)
提前致谢 :)
我有一个相当大的数据框,其中有多个“-”代表丢失的数据。数据框由多个 Excel 文件组成,无法使用“na.strings =”或替代函数,因此我必须使用“-”表示导入它们。
如何用 NA / 缺失值替换数据框中的所有“-”?数据框由 200 列字符、因子和整数组成。
到目前为止,我已经尝试过:
sum(df %in c("-"))
returns: [1] 0
df[df=="-"] <-NA #does not do anything
library(plyr)
df <- revalue(df, c("-",NA))
returns: Error in revalue(tmp, c("-", NA)) :
x is not a factor or a character vector.
library(anchors)
df <- replace.value(df,colnames(df),"-",as.character(NA))
Error in charToDate(x) :
character string is not in a standard unambiguous format
Run Code Online (Sandbox Code Playgroud)
数据框由 200 列字符、因子和整数组成,所以我可以理解为什么最后两个不能正常工作。任何帮助,将不胜感激。
我有一个看起来像这样的数据集。您可以看到列 X2 具有键值。我想通过 X2 列中的键值对 X1 列中的对值求和。我一直在尝试使用 ddply 或聚合,但我遇到了问题。有没有人有一个简单的方法来做到这一点?
> X1=rnorm(30,mean=20, sd=10)
> X2=rep(1:15,2)
>df= data.frame(X1,X2)
X1 X2
1 10.065545 1
2 6.938315 2
3 5.657782 3
4 11.371521 4
5 37.037992 5
6 13.443674 6
7 8.868314 7
8 5.944946 8
9 18.493563 9
10 16.059931 10
11 22.520693 11
12 17.172936 12
13 28.676676 13
14 27.200911 14
15 30.560696 15
16 22.435021 1
17 31.143627 2
18 19.234473 3
19 29.329251 4
20 18.420183 5
21 13.184905 …Run Code Online (Sandbox Code Playgroud) plyr ×6
r ×6
aggregate ×2
correlation ×1
foreach ×1
key ×1
key-value ×1
missing-data ×1
package ×1
subset ×1