标签: plyr

aaply在向量上失败

我试图了解如何在向量上使用优秀的plyr包的命令(在我的情况下,使用字符串).我想我想要使用aaply,但它失败了,要求保证金.但是我的矢量中没有列或行!

更具体一点,以下命令有效,但返回结果列表很奇怪.states.df是一个数据框,region是状态的名称(使用Hadley的map_data("state")命令返回).因此,states.df $ region是字符串的向量(特别是州名).opinion.new是一个数字向量,使用州名命名.

states.df <- map_data("state")
ch = sapply(states.df$region, function (x) { opinion.new[names(opinion.new)==x] } )
Run Code Online (Sandbox Code Playgroud)

我想做的是:

ch = aaply(states.df$region, function (x) { opinion.new[names(opinion.new)==x] } )
Run Code Online (Sandbox Code Playgroud)

其中ch是从opinion.new查找或拉出的数字向量.但aaply需要一个数组,并在向量上失败.

谢谢!

r plyr

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

使用R中的Plyr和一个返回多个变量的复杂函数

我有一个包含三个分组变量的数据集:condition,sub和delay.这是我的数据的简化版本(实际数据更长)

sub condition delay later_value choiceRT later_choice primeRT        cue
 10      SIZE    10          27     1832            1     888      CHILD
 10      PAST     5          11      298            0    1635      PANTS
 10      SIZE    21          13      456            0     949      CANDY
 11      SIZE   120          22      526            1    7963        BOY
 11    FUTURE   120          27      561            1    4389   CHILDREN
 11      PAST     5          13      561            1    2586     SPRING
Run Code Online (Sandbox Code Playgroud)

我有一套复杂的程序来应用这些数据(细节并不重要)我编写了以下函数,它可以在分割三个分组变量时完成我想要的功能.它返回我感兴趣的3个变量(indiff,p_intercept,&p_lv)

 getIndiffs <- function(currdelay){
      if (mean(currdelay$later_choice) == 1) {
        indiff = 10.5
        p_intercept = "laters"
        p_lv = "laters"
      }

      else if (mean(currdelay$later_choice) == …
Run Code Online (Sandbox Code Playgroud)

r plyr

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

怀疑R中的ddply函数

我正在尝试通过名为的函数进行等效的group by摘要.我有一个数据框,有三列(比方说,和).然后,我想计算每个出现在数据框中的时间(带)并获取每个对应于列的最后一个元素.Rplyrddplyidperiodeventidcount(*)... group by idSQLidevent

这是我拥有的和我想要获得的内容的一个例子:

  id period event #original data frame
  1      1     1
  2      1     0
  2      2     1
  3      1     1
  4      1     1
  4      1     0

  id  t  x #what I want to obtain
  1   1  1
  2   2  1
  3   1  1
  4   2  0
Run Code Online (Sandbox Code Playgroud)

这是我用过的简单代码:

 teachers.pp<-read.table("http://www.ats.ucla.edu/stat/examples/alda/teachers_pp.csv", sep=",", header=T) # whole data frame
 datos=ddply(teachers.pp,.(id),function(x) c(t=length(x$id), x=x[length(x$id),3])) #This is working fine.
Run Code Online (Sandbox Code Playgroud)

现在,我一直在阅读用于数据分析的Split-Apply-Combine策略, …

r plyr

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

如何创建一个包含R中另一列的最大值的列?

使用R,我想创建一个新列(MaxAct),显示不同列(ActNo)的最大数量,同时按两个因子分组(HHID和PERID)

例如,我有这个数据集:

UID HHID PERID ActNo
1   1000 1     1
2   1000 1     2
3   1000 1     3
4   1000 2     1
5   1000 2     2
6   2000 1     1
7   2000 1     2
8   2000 1     3
9   2000 1     4
10  2000 2     1
11  2000 2     2
Run Code Online (Sandbox Code Playgroud)

然后我想添加新列(MaxAct),如下所示:

UID HHID PERID ActNo MaxAct
1   1000 1     1     3
2   1000 1     2     3
3   1000 1     3     3
4   1000 2     1     2
5   1000 2     2 …
Run Code Online (Sandbox Code Playgroud)

r plyr data.table

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

将函数应用于数据框

我无法弄清楚为什么这不起作用.我有一个包含5列n行的数据集.我只想对每一行应用一个函数,并以n×1向量返回结果.

为了测试一切是如何工作的,我做了这个简单的功能:

f1 <- function(uniqueid,Perspvalue,expvalue,stddevi,stddevc) {
    uniqueid+ Perspvalue- expvalue+ stddevi+stddevc
}
Run Code Online (Sandbox Code Playgroud)

这是我的数据集的前几行:

> data
     uniqueid   Perspvalue    expvalue      stddevi      stddevc
1           1 2.404421e+03  3337239.00 8.266566e+03 3.324624e+03
2           2 1.345307e+03  3276559.87 7.068823e+03 2.648072e+03
3           3 1.345307e+03  3276559.87 7.068823e+03 2.648072e+03
Run Code Online (Sandbox Code Playgroud)

请注意,它是一个数据框(我认为),而不是矩阵.我使用read.csv从csv加载数据.

所以我试试这个: apply(data,1,f1)

但我的结果是这样的: Error in uniqueid + Perspvalue : 'Perspvalue' is missing

我期待一个数字而不是错误.

r plyr

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

拆分数据集,对每个组应用不同的操作,然后组合

我使用下面的代码将数据集拆分为两个,并在每一半上执行类似的操作.然后将这两个结果合并在一起.我知道我可能正在描述split-apply-combine框架,但我无法想到如何简化下面的代码.

数据集有4个要更新的变量.4个变量中的每一个都有一个公式来计算新值,每半个公式有不同的公式,共计8个公式.

下面的代码可能会通过某种程度的矢量化来改进吗?它似乎比必要的更冗长.我不确定如何为每个分割半部执行不同的操作(即使用不同的公式),除了下面的方法.

data <- structure(list(site = c(1L, 1L, 1L, 1L, 1L, 1L), plot = 1:6, 
    C = c(40L, 30L, 10L, 5L, 0L, 0L), E = c(0L, 0L, 0L, 10L, 
    20L, 45L), M = c(0L, 0L, 0L, 0L, 0L, 10L), P = c(1000L, 900L, 
    800L, 500L, 200L, 50L), FF = c(1L, 1L, 1L, 0L, 0L, 0L)), .Names = c("site", 
"plot", "C", "E", "M", "P", "FF"), class = "data.frame", row.names = c(NA, 
-6L)) 

df1 <- data[data$FF == 1,]
df0 <- data[data$FF …
Run Code Online (Sandbox Code Playgroud)

r plyr dplyr data.table

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

用R中的data.frames计算月收益

我想计算一段时间内的证券清单的每月收益。我拥有的数据具有以下结构:

date   name  value
"2014-01-31"   a    10.0
"2014-02-28"   a    11.1
"2014-03-31"   a    12.1
"2014-04-30"   a    11.9
"2014-05-31"   a    11.5
"2014-06-30"   a    11.88
"2014-01-31"   b    6.0
"2014-02-28"   b    8.5
"2014-03-31"   b    8.2
"2014-04-30"   b    8.8
"2014-05-31"   b    8.3
"2014-06-30"   b    8.9 
Run Code Online (Sandbox Code Playgroud)

我试过的代码:

database$date=as.Date(database$date)
monthlyReturn<- function(df) { (df$value[2] - df$value[1])/(df$value[1]) }
mon.returns <- ddply(database, .(name,date), monthlyReturn)
Run Code Online (Sandbox Code Playgroud)

但是,“ monthlyReturn”列的输出为零。

有什么想法吗?

r time-series financial plyr dataframe

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

拆分/融化数据

说我有以下内容 data.frame

df <- data.frame(letters = c("a, b", "a", "b", "a, c"), value = c(1, 2, 3, 4))
df
#>   letters value
#> 1    a, b     1
#> 2       a     2
#> 3       b     3
#> 4    a, c     4
Run Code Online (Sandbox Code Playgroud)

我要拆分/融化到哪个

#>   letters value
#> 1       a     1
#> 2       b     1
#> 3       a     2
#> 4       b     3
#> 5       a     4 
#> 6       c     4 
Run Code Online (Sandbox Code Playgroud)

为了每个单独记录 letters

r plyr reshape2 dplyr

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

dplyr过滤器如何在R中工作?

我想仅从点(1,1)过滤掉小于10个单位的行.我的数据框有两列,x和y.

这是我尝试过的:

filter(df, dist( rbind(c(1,2), c(x,y)) ) < 10 )
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.它总是返回0行结果,虽然我知道它应该返回几行.我该怎么调试呢?我想在每次迭代中打印传递给x和y的每个值.

每个请求,这是dput(head(df))的输出:

structure(list(x = c(1, 2, 3, 4, 5), y = c(1, 1, 1, 1, 1)), .Names = c("x", 
"y"), row.names = c(NA, 5L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

r plyr

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

是否有一个辅助函数可以使代码更清晰?

我需要对列之一生成的序列求和.我这样做了:

test <- tibble::tibble(
  x = c(1,2,3)
)
test %>% dplyr::mutate(., s = plyr::aaply(x, .margins = 1, .fun = function(x_i){sum(seq(x_i))}))
Run Code Online (Sandbox Code Playgroud)

有更清洁的方法吗?是否有一些帮助函数,构造允许我减少这个:

plyr::aaply(x, .margins = 1, .fun = function(x_i){sum(seq(x_i))})
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个通用的解决方案,这里sum和seq只是一个例子.也许真正的问题是我确实想要在元素上执行函数而不是所有向量.

这是我的真实案例:

test <- tibble::tibble(
  x = c(1,2,3),
  y = c(0.5,1,1.5)
)
d <- c(1.23, 0.99, 2.18)

test %>% mutate(., s = (function(x, y) {
  dn <- dnorm(x = d, mean = x, sd = y)
  s <- sum(dn)
  s
})(x,y))

test %>% plyr::ddply(., c("x","y"), .fun = function(row) {
  dn <- dnorm(x …
Run Code Online (Sandbox Code Playgroud)

r plyr dplyr tibble

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

标签 统计

plyr ×10

r ×10

dplyr ×3

data.table ×2

dataframe ×1

financial ×1

reshape2 ×1

tibble ×1

time-series ×1