标签: sapply

read.xls - 读取可变长度的工作表列表及其名称

鉴于几个.xls具有不同页数的文件,我读他们到R使用read.xlsgdata包.我有两个相关的问题(解决第二个问题应解决第一个问题):

  1. 提前知道每个.xls文件将有多少张纸,实际上这个值会因文件而异.
  2. 我需要捕获工作表的名称,这是相关数据

现在,要解决(1),我正在使用try()并迭代工作表编号,直到我遇到错误.

如何获取工作表名称列表以便我可以迭代它们?

xls r vectorization gdata sapply

6
推荐指数
2
解决办法
1912
查看次数

什么是`[[`在这个公平的例子中寻找?

后续如何使用`[[`和`$`作为函数?问题:我开始玩原始设置(为简单起见,将尺寸从10000缩小到3)

JSON <- rep(list(x,y),3)
x <- list(a=1, b=1)
y <- list(a=1)
JSON <- rep(list(x,y),3)
sapply(JSON, "[[", "a")
[1] 1 1 1 1 1 1
sapply(JSON,"[[",'b')
[[1]]
[1] 1

[[2]]
NULL

[[3]]
[1] 1

[[4]]
NULL

[[5]]
[1] 1

[[6]]
NULL

sapply(JSON,'[[',1)
[1] 1 1 1 1 1 1
sapply(JSON,'[[',2)
Error in FUN(X[[2L]], ...) : subscript out of bounds
Run Code Online (Sandbox Code Playgroud)

我认为我理解 - 搜索"b"与要求存在第二个元素不同.但后来,我创建了一个更深入的列表:

NOSJ<-rep(list(JSON),3)

sapply(NOSJ,'[[',1)
  [,1] [,2] [,3]
a 1    1    1   
b 1    1    1   
sapply(NOSJ,'[[',2)
$a
[1] 1 …
Run Code Online (Sandbox Code Playgroud)

r sapply

6
推荐指数
1
解决办法
156
查看次数

R具有逻辑矩阵的子集向量

我想用以下方式用逻辑矩阵对数值向量进行子集化:给定向量y

y <- c(4,8,1,3,5,7)
Run Code Online (Sandbox Code Playgroud)

和逻辑矩阵lmat

lmat <- t(matrix(c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
TRUE,  FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, TRUE,  FALSE, FALSE, FALSE, FALSE,
TRUE,  TRUE,  FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE,  TRUE, FALSE, FALSE, FALSE,
TRUE,  FALSE,  TRUE, FALSE, FALSE, FALSE),  ncol = 6))
Run Code Online (Sandbox Code Playgroud)

看起来像这样

> lmat
      [,1]  [,2]  [,3]  [,4]  [,5]  [,6]
[1,] FALSE FALSE FALSE FALSE FALSE FALSE
[2,]  TRUE FALSE FALSE FALSE FALSE FALSE
[3,] FALSE  TRUE FALSE FALSE FALSE FALSE
[4,]  TRUE  TRUE FALSE …
Run Code Online (Sandbox Code Playgroud)

r list subset apply sapply

6
推荐指数
1
解决办法
203
查看次数

R:删除嵌套的for循环,以使自定义引导更有效

我试图从数据集中收集一些摘要统计数据的自举估计值,但我想以不同的速率重新采样部分数据集,这使我依赖于嵌套的for循环.

具体来说,假设我的数据集中有两个组,每个组进一步分为测试和控制.第1组具有75%/ 25%的测试控制比,第2组具有50%/ 50%的测试控制比.

我想重新采样,使得数据集大小相同,但两组的测试控制比率均为90%/ 10%...换句话说,以不同的速率对不同的子组进行重新采样,这让我感觉不同于boot包通常会.

在我的数据集中,我创建了一个group表示组的groupT变量,以及一个表示与test/control连接的组的变量,例如:

    id     group     groupT
     1         1         1T
     2         1         1T
     3         2         2T
     4         1         1C
     5         2         2C
Run Code Online (Sandbox Code Playgroud)

这是我现在正在运行的,nreps任意设置为我的引导复制数:

for (j in 1:nreps){

  bootdat <- datafile[-(1:nrow(datafile)),] ## initialize empty dataset

  for (i in unique(datafile$groups)){

    tstring<-paste0(i,"T") ## e.g. 1T
    cstring<-paste0(i,"C") ## e.g. 1C

    ## Size of test group resample should be ~90% of total group size

    tsize<-round(.90*length(which(datafile$groups==i)),0)

    ## Size of control group resample should be total …
Run Code Online (Sandbox Code Playgroud)

for-loop r sapply statistics-bootstrap

6
推荐指数
1
解决办法
259
查看次数

R 从列表列表中删除空(nchar = 0)元素

我有一个列表/向量列表:

list(c("cat1", "cat6", ""), c("cat5", "cat3", "cat4"), c("cat6", 
"cat4", ""), c("cat5", "cat1", "cat2", "cat4"), c("cat6", "cat3", 
"cat2"))
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种优雅的方法来删除 nchar=0 的内部元素,例如第一个列表中的第三个元素(值为“”)。我努力了:

l[lapply(l,length)>0] 
Run Code Online (Sandbox Code Playgroud)

但这不适用于内部元素长度,而是适用于外部列表元素长度。预期输出是:

list(c("cat1", "cat6"), c("cat5", "cat3", "cat4"), c("cat6", 
    "cat4"), c("cat5", "cat1", "cat2", "cat4"), c("cat6", "cat3", 
    "cat2")) 
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏

r list nested-lists sapply

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

R:如何在 lapply() 中应用 grep()

我想在 R 中应用 grep(),但我不太擅长 lapply()。我知道 lapply 能够获取一个列表,将函数应用于每个成员并输出一个列表。例如,假设x一个列表由 2 个成员组成。

> x<-strsplit(docs$Text," ")
> 
> x
[[1]]
 [1] "I"         "lovehttp"  "my"        "mum."      "I"         "love"     
 [7] "my"        "dad."      "I"         "love"      "my"        "brothers."

[[2]]
 [1] "I"         "live"      "in"        "Eastcoast" "now."      "Job.I"    
 [7] "used"      "to"        "live"      "in"        "WestCoast."  
Run Code Online (Sandbox Code Playgroud)

我想应用 grep() 函数来删除由 http 组成的单词。所以,我会申请:

> lapply(x,grep(pattern="http",invert=TRUE, value=TRUE))
Run Code Online (Sandbox Code Playgroud)

但它不起作用,它说

Error in grep(pattern = "http", invert = TRUE, value = TRUE) : 
argument "x" is missing, with no default
Run Code Online (Sandbox Code Playgroud)

所以,我试过了

> lapply(x,grep(pattern="http",invert=TRUE, value=TRUE,x))
Run Code Online (Sandbox Code Playgroud)

但它说

Error …
Run Code Online (Sandbox Code Playgroud)

r lapply sapply tapply

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

python中的sapply等价物?

我需要一次增长一个 python DataFrame 一行。

在 R 中,该sapply()函数快速而高效。例如,

sapply(1:100, function(i) rnorm(50) ) 
Run Code Online (Sandbox Code Playgroud)

产生一个 50 x 100 的(标准正态随机)数字矩阵,然后可以根据需要转置和/或转换为数据帧

如何在python中有效地做同样的事情?

python r sapply

5
推荐指数
2
解决办法
9234
查看次数

表示多个组的多个列

我正在尝试为具有多个组的数据框的多列找到不包括 NA 的方法

airquality <- data.frame(City = c("CityA", "CityA","CityA",
                                  "CityB","CityB","CityB",
                                  "CityC", "CityC"),
                         year = c("1990", "2000", "2010", "1990", 
                                  "2000", "2010", "2000", "2010"),
                         month = c("June", "July", "August",
                                   "June", "July", "August",
                                   "June", "August"),
                         PM10 = c(runif(3), rnorm(5)),
                         PM25 = c(runif(3), rnorm(5)),
                         Ozone = c(runif(3), rnorm(5)),
                         CO2 = c(runif(3), rnorm(5)))
airquality
Run Code Online (Sandbox Code Playgroud)

所以我得到一个带有数字的名称列表,所以我知道要选择哪些列:

nam<-names(airquality)
namelist <- data.frame(matrix(t(nam)));namelist
Run Code Online (Sandbox Code Playgroud)

我想按城市和年份计算 PM25、臭氧和二氧化碳的平均值。这意味着我需要第 1,2,4,6:7 列)

acast(datadf, year ~ city, mean, na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)

但这并不是我真正想要的,因为它包含了我不需要的东西的平均值,而且它不是数据帧格式。我可以转换它然后删除,但这似乎是一种非常低效的方法。

有没有更好的办法?

r sapply dplyr dcast

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

sapply - 保留列名

我试图总结数据集中许多不同列(变量)的均值、标准差等。我编写了自己的汇总函数以准确返回我需要的内容,并使用 sapply 一次将此函数应用于所有变量。它工作正常,但是返回的数据框没有列名,我似乎甚至无法使用列号引用重命名它们 - 也就是它们似乎无法以任何方式使用。

我的代码如下 - 因为我只是在查找汇总统计信息,所以我只想使用相同的列(变量)名称,有 4 行(平均值、标准差、最小值、最大值)。有什么办法可以做到这一点(即使是我手动更改列名称的缓慢方法)

 #GENERATING DESCRIPTIVE STATISTICS
sfsum= function(x){
  mean=mean(x)
  sd=sd(x)
  min=min(x)
  max=max(x)

  return(c(mean,sd,min,max))
}

#
c= list(sfbalanced$age_child, sfbalanced$earnings_child, 
sfbalanced$logchildinc ,sfbalanced$p_inc84, sfbalanced$login84, 
sfbalanced$p_inc85, sfbalanced$login85, sfbalanced$p_inc86, 
sfbalanced$login86, sfbalanced$p_inc87, sfbalanced$login87, 
sfbalanced$p_inc88, sfbalanced$login88)

summ=sapply(c,sfsum)

names(summ)
 NULL
Run Code Online (Sandbox Code Playgroud)

r columnname sapply

5
推荐指数
2
解决办法
4043
查看次数

为什么 R 的 sapply 和 switch 函数将字符值视为函数?

我正在尝试使用 sapply 和 switch 将描述性名称应用于数据。我已经多次使用这种方法,没有出现任何问题,但对于我最近的项目中的(只有一个!)专栏,它抛出了错误。我最好的猜测是,即使该值保存为字符串,该值也将是 R 中的保留字。我在下面创建了一个可重现的示例。

我的项目中的实际值与性别无关,并且可能有许多可能的选择。有人可以告诉我如何使用 sapply/switch 来避免代码中出现许多嵌套的 ifelse 语句吗?

# create test data
testdta <- as.data.frame(cbind(userid = c("1", "2", "3", "4"), gender = c("F", "M", "F", "M")))

# sapply/switch works with strings that are not reserved words
testdta$uiddescription <- sapply(testdta$userid, switch, "1" = "1 - first", "2" = "2 - second", "3+ - third or beyond")
testdta

# sapply/switch won't work when trying to interpret gender (possibly because F is reserved?)
testdta$gdescription <- sapply(testdta$gender, switch, "F" = …
Run Code Online (Sandbox Code Playgroud)

r switch-statement sapply

5
推荐指数
2
解决办法
71
查看次数