我有一组函数funs <- c(mean, median, min, max, quantile)想要应用于数字向量values。这可以很容易地完成sapply(),但结果是没有一个元素有名称。我希望每个列表元素根据应用的函数命名。我试过:
funs <- c(mean, median, min, max, quantile)
some_vals <- c(rnorm(14))
stats <- sapply(funs, function(fun) {
result <- fun(some_vals)
names(result) <- deparse(substitute(fun))
return(result)
}
)
Run Code Online (Sandbox Code Playgroud)
但每个列表元素都被命名为 X[[i]]。如何根据应用的函数命名列表元素?
可能重复:
为什么mapply不返回日期对象?
我得到了以下bizzar问题,当我将一个字符串转换为日期时我没有问题:
as.Date(的Alldays [1])
[1] "3-04-20"
Run Code Online (Sandbox Code Playgroud)
然而,当我使用sapply或lapply时,我得到了一个很大的负数,有谁知道为什么会这样?谢谢!
> (sapply(alldays[1:4], as.Date))
03-04-2012 02-04-2012 30-03-2012 29-03-2012
-718323 -718688 -708492 -708857
Run Code Online (Sandbox Code Playgroud)
大家好,我发现了这个问题,非常感谢你的帮助!
我正在尝试使用apply/ mapply/ lapply/ sapply或任何其他方式来矢量化我的嵌套for循环代码以减少运行时间.我的代码如下:
for (i in 1:dim){
for (j in i:dim){
if(mydist.fake[i,j] != d.hat.fake[i,j]){
if((mydist.fake[i,j]/d.hat.fake[i,j] > 1.5)|(d.hat.fake[i,j]/mydist.fake[i,j]>1.5)){
data1 = cbind(rowNames[i],rowNames[j], mydist.fake[i,j], d.hat.fake[i,j], 1)
colnames(data1) = NULL
row.names(data1) = NULL
data = rbind(data, data1)
}else{
data1 = cbind(rowNames[i],rowNames[j], mydist.fake[i,j], d.hat.fake[i,j], 0)
colnames(data1) = NULL
row.names(data1) = NULL
data = rbind(data, data1)
}
}
}
}
write.table(data, file = "fakeTest.txt", sep ="\t", col.names = FALSE, row.names = FALSE)
Run Code Online (Sandbox Code Playgroud)
data 是一个数据帧mydist.fake并且d.hat.fake是距离矩阵(其中对角线为零并且上三角和下三角的值相同)因此,对下三角的横向感兴趣(也留下对角线的值).我试图在这里找到类似的问题,但认为创建新问题可能会有所帮助.
我有相对较大的数据集(几百个站的每日天气数据)我做了一些滑动窗口平均计算,我得到了这样的中间输出.
数据框10481441 row由11 column但我的行名称由具有可识别前缀的一系列数字组成.
例如,
X1.1
X1.2
X1.3
...
X1.11659
X2.1
X2.2
X2.3
...
X2.11659
X3.1
...
X899.11659
Run Code Online (Sandbox Code Playgroud)
然后我想要做的是获得11 columns行号相同前缀的平均值
例如:
对于11 columns mean(X1.1,X2.1,X3.1,...X899.1) (X1.2,X2.2,X3.2,...X899.2)并因此期望有一个输出表作为899组11659 row由11 column
当我有as.Date行名但我无法修改所需的格式时,我在这里得到了一些帮助,在第n行有跳跃平均值.
我很感激你的时间.
正常矩阵将是二维矩阵.但是,我可以初步说明:
a<-array(0,dim=c(2,3,4,5))
Run Code Online (Sandbox Code Playgroud)
这是一个2*4*5*3矩阵或阵列.
命令
apply(a,c(2,3),sum)
Run Code Online (Sandbox Code Playgroud)
将给出一个4*5数组,包含第1和第4维中元素的总和.
为什么呢?据我所知,在apply函数中,1表示行,2表示列,但3是什么意思?
我们需要一些抽象.
我有一个大的数据集df(354903行)与名为两列df$ColumnName和df$ColumnName.1
head(df)
CompleteName CompleteName.1
1 Lefebvre Arnaud Lefebvre Schuhl Anne
1.1 Lefebvre Arnaud Abe Lyu
1.2 Lefebvre Arnaud Abe Lyu
1.3 Lefebvre Arnaud Louvet Nicolas
1.4 Lefebvre Arnaud Muller Jean Michel
1.5 Lefebvre Arnaud De Dinechin Florent
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建标签以查看天气名称是否相同。当我尝试一个小的子集时,它可以工作[如果它们相同则为1,否则为0]:
> match(df$CompleteName[1], df$CompleteName.1[1], nomatch = 0)
[1] 0
> match(df$CompleteName[1:10], df$CompleteName.1[1:10], nomatch = 0)
[1] 0 0 0 0 0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
但是,一旦我抛出完整的列,它就会为我提供完整的不同值,这对我来说似乎毫无意义:
> match(df$CompleteName, df$CompleteName.1, nomatch = 0)
[1] 101 101 101 101 …Run Code Online (Sandbox Code Playgroud) 所有变量在data.frame 1-5中都处于相同的比例.
data.frame的示例
rpi_invert
A B C D
5 2 4 1
3 5 5 2
1 1 3 4
Run Code Online (Sandbox Code Playgroud)
对于所有相等的值,5我想将其更改为1.
为4改变2.
为2改变4.
为1改变5.
值更改后的data.frame示例.
rpi_invert
A B C D
1 4 2 5
3 1 1 4
5 5 3 2
Run Code Online (Sandbox Code Playgroud)
我累了.
for(b in colnames(rpi_invert)){
rpi_invert[[b]][rpi_invert[[b]] == 5] <- 1
rpi_invert[[b]][rpi_invert[[b]] == 4] <- 2
rpi_invert[[b]][rpi_invert[[b]] == 2] <- 4
rpi_invert[[b]][rpi_invert[[b]] == 1] …Run Code Online (Sandbox Code Playgroud) 在R中,我们可以使用以下sapply方法提取具有大于10的唯一值数的列:
X[, sapply(X, function(x) length(unique(x))) >=10]
Run Code Online (Sandbox Code Playgroud)
我们如何在Python Pandas中做同样的事情?
另外,我们如何选择缺少比例小于10%的列,就像我们在R中所做的那样:
X[, sapply(X, function(x) sum(is.na(x))/length(x) ) < 0.1]
Run Code Online (Sandbox Code Playgroud)
谢谢.
我有一个具有多个因素和多个数值变量的数据框。我想瓦解其中一个因素(平均而言)。
在我的尝试中,我只能想到嵌套的sapply或for循环以隔离要求平均值的数值元素。
var <- data.frame(A = c(rep('a',8),rep('b',8)), B =
c(rep(c(rep('c',2),rep('d',2)),4)), C = c(rep(c('e','f'),8)),
D = rnorm(16), E = rnorm(16))
> var
A B C D E
1 a c e 1.1601720731 -0.57092435
2 a c f -0.0120178626 1.05003748
3 a d e 0.5311032778 1.67867806
4 a d f -0.3399901000 0.01459940
5 a c e -0.2887561691 -0.03847519
6 a c f 0.0004299922 -0.36695879
7 a d e 0.8124655890 0.05444033
8 a d f -0.3777058654 1.34074427
9 b c e 0.7380720821 0.37708543 …Run Code Online (Sandbox Code Playgroud) 有人告诉我尝试使用vapply()而不是sapply()我的代码和函数。我sapply()经常使用,并且尝试使用它,vapply()但是我的一些功能sapply()用法相当复杂。
我在下面举一个例子,希望对使用vapply()而不是来重新生成相同结果提供一些指导sapply()。
> dput(head(df[1]))
structure(list(D1 = structure(c(WP1 = 47L, WP10 = 17L, WP103 = 21L,
WP108 = 23L, WP113 = 34L, WP116 = 79L), .Label = c(" 0.00",
" 0.57", " 10.00", "100.00", " 10.20", " 10.26", " 10.34", " 10.53",
" 10.87", " 11.11", " 11.36", " 11.48", " 11.54", " 11.76", " 11.94",
" 12.20", " 12.50", " 12.86", " 12.90", " 1.30", " …Run Code Online (Sandbox Code Playgroud)