相关疑难解决方法(0)

将嵌套循环的结果写入R中的矢量对象

我将以下数据读入R作为名为"data_old"的数据框:

   yes year month
1  15 2004     5
2   9 2005     6
3  15 2006     3
4  12 2004     5
5  14 2005     1
6  15 2006     7
.   .  ...     .
.   .  ...     .
Run Code Online (Sandbox Code Playgroud)

我写了一个小循环来遍历数据并总结每个月/年组合的yes变量:

year_f <- c(2004:2006)
month_f <- c(1:12)

for (i in year_f){
    for (j in month_f){
        x <- subset(data_old, month == j & year == i, select="yes")
        if (nrow(x) > 0){
            print(sum(x))
            }
        else{print("Nothing")}
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是:我可以在终端中打印每个月/年组合的总和,但是如何将其存储在矢量中?(嵌套循环让我头疼,试图解决这个问题).

托马斯

statistics loops nested r

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

循环在R中

这是我的问题:我有两个不同的数据框(A和B).每个数据框的列是地理位置,行数据是地点的种类.我需要将数据名称A的地点1的物种列表与数据帧B的所有地点的物种列表相交.为此我写了一个这样的循环:

res<-list()
for(i in 1:length(B)) {intersect(A[1], B[i])->res[[i]]
}
Run Code Online (Sandbox Code Playgroud)

现在我必须为A的地点2,3,4,5,6 .....重复相同的循环,也就是说我必须将A的所有地点与B的所有地点相交.

谢谢.

loops r

2
推荐指数
1
解决办法
611
查看次数

如何创建一个函数和一个循环来计算R中数据框中变量的增长率

R和Stack Overflow的新功能.假设我将以下宏观经济数据加载到R中名为testdata的数据框中.

> testdata
      date    gdp cpi_index rpi_index
21 2013 Q1 409985   125.067     247.4
22 2013 Q2 412620   125.971     249.7
23 2013 Q3 415577   126.352     250.9
24 2013 Q4 417265   127.123     252.5
25 2014 Q1 420091   127.241     253.9
26 2014 Q2 423249   128.139     256.0
27 2014 Q3 426022   128.191     256.9
28 2014 Q4 428347   128.312     257.4
Run Code Online (Sandbox Code Playgroud)

我想生成一个名为testdata_growth的新数据,其中包含testdata中宏变量的qoq增长率.目前我的解决方法如下:

# Generating q-o-q growth rates
gdp_growth <- c(NA, diff(testdata$gdp)/ testdata$gdp[-1])
rpi_index_growth <- c(NA, diff(testdata$rpi_index)/ testdata$rpi_index[-1])
cpi_index_growth <- c(NA, diff(testdata$cpi_index)/ testdata$cpi_index[-1])

# Combining growth …
Run Code Online (Sandbox Code Playgroud)

r time-series

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

R:如何用向量乘以列表元素?

我想要乘以一个矩阵列表(有一行),如下所示:

lst <- list("111.2012"=matrix(c(1, 0, 6, NA, 1, 0),
                            nrow = 1, byrow = T),
          "112.2012"=matrix(c(6, 2, 2, 0, 3, NA),
                            nrow = 1, byrow = T))
Run Code Online (Sandbox Code Playgroud)

使用这样的矢量(与每个矩阵的长度相同):

vec <- c(1,2,3,1,2,3)
Run Code Online (Sandbox Code Playgroud)

并期待这个结果:

$`111.2012`
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    0   18   NA    2    0

$`112.2012`
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    6    4    6    0    6   NA
Run Code Online (Sandbox Code Playgroud)

我到目前为止尝试了这个:

mapply("*", lst, vec) 
Map("*", lst, vec)
Run Code Online (Sandbox Code Playgroud)

这给了我三倍的数字和错误的数字.我还想过在mapply中使用lapply来添加列表,但是不知道怎么做.有什么建议?谢谢

r list

2
推荐指数
1
解决办法
4385
查看次数

为什么sapply()和lapply()有相同的结果?

我是R.的新手.我正在练习lapply()和sapply()函数:lapply()返回list,sapply()返回vector/matrix.现在我不明白为什么lapply()和sapply()与列表有相同的结果?

> x1 <- lapply(list(1:3, 25:29), function(x) {2*x})
> x2 <- sapply(list(1:3, 25:29), function(x) {2*x})
> x1
[[1]]
[1] 2 4 6

[[2]]
[1] 50 52 54 56 58

> x2
[[1]]
[1] 2 4 6

[[2]]
[1] 50 52 54 56 58

> str(x2)
List of 2
 $ : num [1:3] 2 4 6
 $ : num [1:5] 50 52 54 56 58
> mode(x2)
[1] "list"
Run Code Online (Sandbox Code Playgroud)

之后,我检查了unlist()并返回相同的输入作为向量.很难理解为什么sapply()返回列表类型的结果.

谢谢.

r

2
推荐指数
1
解决办法
77
查看次数

将数据帧转换为未命名列表

我的数据框df看起来像这样

    A     B     C     D
1   78    12    43    12
2   23    12    42    13
3   14    42    11    99
4   49    94    27    72
Run Code Online (Sandbox Code Playgroud)

我需要将前两列转换为一个看起来完全像这样的列表:

[[1]]
[1] 78 12

[[2]]
[1] 23 12

[[3]]
[1] 14 42

[[4]]
[1] 49 94
Run Code Online (Sandbox Code Playgroud)

基本上是什么

list(c(78, 12), c(23, 12), c(14, 42), c(49, 94)
Run Code Online (Sandbox Code Playgroud)

会做.我试过这个

lapply(as.list(1:dim(df)[1]), function(x) df[x[1],])
Run Code Online (Sandbox Code Playgroud)

以及

lapply(as.list(1:nrow(df)), function(x) df)
Run Code Online (Sandbox Code Playgroud)

但那略有不同.有什么建议?

r list dataframe

2
推荐指数
1
解决办法
164
查看次数

为什么 Map 只需要一组向量作为参数,而 mapply 需要一组向量和 MoreArgs 参数?

据我所知,除了简化之外,可以mapplyMap. 毕竟,Mapmapply. 但是,我很惊讶地看到它mapply需要一...组参数(文档称之为“要向量化的参数(严格为正长度的向量或列表,或所有长度为零) ”)和MoreArgs所需函数顶部的参数f,Map而不使用MoreArgs, 只需要...(文档称之为“向量”)和f.

我的问题是:为什么mapply需要MoreArgsMap不需要?能做不能mapply做的事Map吗?或者是mapply试图让一些更容易的事情变得更难Map?如果是这样,那又怎样?

我怀疑这sapply可能是答案的有用参考点。这可能有助于它的比较XFUN以及...参数mapply...MoreArgs

mapping functional-programming r apply mapply

2
推荐指数
1
解决办法
176
查看次数

具有R的数据框中的个体的累积总和

我有一个这样的数据框:

data=data.frame(ID=c("0001","0002","0003","0004","0004","0004","0001","0001","0002","0003"),Saldo=c(10,10,10,15,20,50,100,80,10,10),place=c("grocery","market","market","cars","market","market","cars","grocery","cars","cars"))
Run Code Online (Sandbox Code Playgroud)

我试图计算ID变量应用cumsum或apply的每个人的aldo总和,但我没有得到我想要的结果.我希望有人这样:

  ID      Saldo.Total
1 0001         190
2 0002          20
3 0003          20
4 0004          85 
Run Code Online (Sandbox Code Playgroud)

r

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

在R中正确构建函数

我在写我的第一个有史以来功能(包括任何其他的编程语言),我对正确的结构有点混乱if,elseifelse.我搜索了大量的例子,但没有一个对我很清楚.

情况 - 我试图通过他们成为客户的时间来吸引客户,然后将其变成一个因素.

#Sample Data
clientID <- round(runif(2,min=2000, max=3000),0)
MonthsSinceSignUp <- round(runif(20,min=1, max=60),0)
df <- data.frame(cbind(clientID,MonthsSinceSignUp))
Run Code Online (Sandbox Code Playgroud)

对于给定的客户,我想确定他们是否已经不到一年,超过一年,但少于2,等等.

这是我在函数中的第一次破解:

ClientAgeRange <- function(MonthsSinceSignUp) {
  if (MonthsSinceSignUp < 13) {ClientAgeRange <- '1 year'}
} else {
  if (MonthsSinceSignUp > 13 & MonthsSinceSignUps < 25) {ClientAgeRange <- '2 years'}
} else {ClientAgeRage <- '3+ years'}
Run Code Online (Sandbox Code Playgroud)

我一直得到的错误是: Error: unexpected '}' in "}",这表明我错过了或者有一个额外的结束括号.然而,尽管我的拍摄有问题,但我无法找到它.但是 - 我认为一般来说,我没有将正确的结构应用于该函数.我正在努力制作一个if this, then set this variable as that.如何正确构建此功能?

最后 - 如果我想将函数的输出添加到dataframe …

r function

0
推荐指数
1
解决办法
727
查看次数

R中的sapply():为什么返回输入?

为什么这段代码:

sapply(c(1, 3, 4, 0), print)
Run Code Online (Sandbox Code Playgroud)

返回:

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

为什么它也会返回输入?

r

0
推荐指数
1
解决办法
96
查看次数

根据R中的相同条件筛选多个列

我有一个数据框,其中有多个列(超过30列)保存在列表中.我想对所有这些列应用相同的标准,而不为每列编写每个代码.我有下面的例子来帮助更好地理解我的问题

A<-c("A","B","C","D","E","F","G","H","I")
B<-c(0,0,0,1,2,3,0,0,0)
C<-c(0,1,0,0,1,2,0,0,0)
D<-c(0,0,0,0,1,1,0,1,0)
E<-c(0,0,0,0,0,0,0,1,0)
data<-data.frame(A,B,C,D,E)
Run Code Online (Sandbox Code Playgroud)

假设我以上面的df为例,我已经保存了cols列表,如下所示

list <- c("B","C","D","E")
Run Code Online (Sandbox Code Playgroud)

我想使用与下面相同标准的那些cols

setDT(data)[B>=1 | C>=1 | D>=1 | E>=1]
Run Code Online (Sandbox Code Playgroud)

并得到以下结果

   A B C D E
1: B 0 1 0 0
2: D 1 0 0 0
3: E 2 1 1 0
4: F 3 2 1 0
5: H 0 0 1 1
Run Code Online (Sandbox Code Playgroud)

但是,有没有办法在不编写每个单独的列标准的情况下得到上述答案(例如B> = 1 | C> = 1 ....)因为我在实际数据中有超过30个cols.非常感谢

r apply data.table

0
推荐指数
2
解决办法
542
查看次数

在R中按值和组汇总列

我有这样的数据帧:

data <- read.table(text="group;  yr1;   yr2;    val
  a;        1945;   1946;   20
  a;        1945;   1946;   50
  a;        1947;   1948;   40
  b;        1926;   1927;   45
  b;        1927;   1928;   -10
  b;        1927;   1928;   -15 ", sep=";", header=T, stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)

什么是val按组分别列出每对年份的最佳方法,以便结果如下所示?

group   yr1     yr2     val
a       1945    1946    70
a       1946    1947    40
b       1926    1927    45
b       1927    1928    -25
Run Code Online (Sandbox Code Playgroud)

r sum

-1
推荐指数
1
解决办法
491
查看次数

如何从列表中获取值?

我有一个尺寸统一的清单,如下所示。我想提取键的值。我该怎么做?

我通过使用像这样的names(allsum)地方隔离了钥匙allsum

`$1999
[1] 7332967

$2002
[1] 5635780

$2005
[1] 5454703

$2008
[1] 3464206`
Run Code Online (Sandbox Code Playgroud)

我想要[7332967, 5635780, 5454703, 3464206]作为输出。我尝试过,sapply但是直觉很弱。请帮忙。

for(a in allsum) {
  print(a[[1]])
}
Run Code Online (Sandbox Code Playgroud)

我试过了,它可以工作,但是我想知道我们是否可以使用某些功能或不使用任何显式循环。

我尝试使用unlist 以下操作会发生什么

c1 <- unlist(allsum) 
 #1999    2002    2005    2008 
#7332967 5635780 5454703 3464206
Run Code Online (Sandbox Code Playgroud)

我只需要大数目。如何提取?

r list

-1
推荐指数
2
解决办法
3543
查看次数