小编tal*_*lat的帖子

dplyr group_by并汇总两个具有相同列名的df

假设您有以下两个data.frames:

set.seed(1)
x <- letters[1:10]
df1 <- data.frame(x)
z <- rnorm(20,100,10)
df2 <- data.frame(x,z)
Run Code Online (Sandbox Code Playgroud)

(请注意,两个dfs都有一个名为"x"的列)

你想在df1中总结df2 $ z的总和为"x",如下所示:

df1 %.%
  group_by(x) %.%
  summarize(
    z = sum(df2$z[df2$x == x]) 
   )
Run Code Online (Sandbox Code Playgroud)

这将返回错误"invalid indextype integer"(已翻译).

但是当我在两个dfs中的任何一个中更改列"x"的名称时,它可以工作:

df2 <- data.frame(x1 = x,z) #column is now named "x1", it would also work if the name was changed in df1

df1 %.%
   group_by(x) %.%
   summarize(
     z = sum(df2$z[df2$x1 == x]) 
   )

#   x        z
#1  a 208.8533
#2  b 205.7349
#3  c 185.4313
#4  d 193.8058 …
Run Code Online (Sandbox Code Playgroud)

r dataframe dplyr

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

如何在r中生成具有不同重复值的新列时合并两个大数据集

我有一个问题让我发疯,真的需要你的帮助.简化的问题是这样的:

d1<-data.table(v1=c("a","b","c","d","d","b","a","c","a","d","b","a"),
                    v2=(seq(1:12)),V3=rep(1:4,times=3))

d2<-data.table(v1=c("a","b","c","d"),v3=c(3,2,1,4),v4=c("y","x","t","e"))
Run Code Online (Sandbox Code Playgroud)

这将产生两个数据集:

    D1:     
    v1 v2 V3
 1:  a  1  1
 2:  b  2  2
 3:  c  3  3
 4:  d  4  4
 5:  d  5  1
 6:  b  6  2
 7:  a  7  3
 8:  c  8  4
 9:  a  9  1
10:  d 10  2
11:  b 11  3
12:  a 12  4

> d2
   v1 v3 v4
1:  a  3  y
2:  b  2  x
3:  c  1  t
4:  d  4  e
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,v1和v3中的元素是相同的.现在我想通过在D1中创建一个新列来联合两个数据集,该列返回d2中与索引v1和v3匹配的V4的值,我希望我能得到如下输出:

> …
Run Code Online (Sandbox Code Playgroud)

merge r data.table

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

如何匹配R中具有相同主键的两个表中的数据

我有两张关于人的数据表:

df1 <- data.frame(id=c(113,202,377,288,359),
                  name=c("Alex","Silvia","Peter","Jack","Jonny"))
Run Code Online (Sandbox Code Playgroud)

这为我提供了

   id   name
1 113   Alex
2 202 Silvia
3 377  Peter
4 288   Jack
5 359  Jonny
Run Code Online (Sandbox Code Playgroud)

我有第二张表,其中包含其家庭成员的姓名:

df2 <- data.frame(id=c(113,113,113,202,202,359,359,359,359),
                 family.members=c("Ross","Jefferson","Max","Jo","Michael","Jimmy","Rex","Bill","Larry"))
Run Code Online (Sandbox Code Playgroud)

这为我提供了:

> df2
   id family.members
1 113           Ross
2 113      Jefferson
3 113            Max
4 202             Jo
5 202        Michael
6 359          Jimmy
7 359            Rex
8 359           Bill
9 359          Larry
Run Code Online (Sandbox Code Playgroud)

现在我想扩展表1,其中包含每个人的家庭成员总数的附加列:

    id   name no.family.memebers
1  113   Alex                  3
2  202 Silvia                  2
3  377  Peter                  0
4  288   Jack                  0 …
Run Code Online (Sandbox Code Playgroud)

r dataframe

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

如何将boxplot保存为变量?

如何将箱形图另存为R中的变量?例如,如果我这样做,

plot <- boxplot(count ~ spray, data = InsectSprays, col = "lightgray")
Run Code Online (Sandbox Code Playgroud)

当我调用图时,我希望它显示箱形图,不需要每次都运行绘制箱形图的命令。

有谁有想法吗?

r boxplot

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

并行*在功能内

我想在函数中使用plyr包的并行功能.

我原本以为导出在函数体内创建的对象的正确方法(在本例中,对象是df_2)如下

# rm(list=ls())
library(plyr)
library(doParallel)

workers=makeCluster(2)
registerDoParallel(workers,core=2)

plyr_test=function() {
  df_1=data.frame(type=c("a","b"),x=1:2)
  df_2=data.frame(type=c("a","b"),x=3:4)

  #export df_2 via .paropts  
  ddply(df_1,"type",.parallel=TRUE,.paropts=list(.export="df_2"),.fun=function(y) {
    merge(y,df_2,all=FALSE,by="type")
  })
}
plyr_test()
stopCluster(workers)
Run Code Online (Sandbox Code Playgroud)

但是,这会引发错误

Error in e$fun(obj, substitute(ex), parent.frame(), e$data) : 
  unable to find variable "df_2"
Run Code Online (Sandbox Code Playgroud)

所以我做了一些研究,发现如果我df_2手动导出它就可以了

workers=makeCluster(2)
registerDoParallel(workers,core=2)

plyr_test_2=function() {
  df_1=data.frame(type=c("a","b"),x=1:2)
  df_2=data.frame(type=c("a","b"),x=3:4)

  #manually export df_2
  clusterExport(cl=workers,varlist=list("df_2"),envir=environment())

  ddply(df_1,"type",.parallel=TRUE,.fun=function(y) {
    merge(y,df_2,all=FALSE,by="type")
  })
}
plyr_test_2()
stopCluster(workers)
Run Code Online (Sandbox Code Playgroud)

它给出了正确的结果

  type x.x x.y
1    a   1   3
2    b   2   4
Run Code Online (Sandbox Code Playgroud)

但我也发现以下代码有效

workers=makeCluster(2)
registerDoParallel(workers,core=2)

plyr_test_3=function() {
  df_1=data.frame(type=c("a","b"),x=1:2)
  df_2=data.frame(type=c("a","b"),x=3:4)

  #no …
Run Code Online (Sandbox Code Playgroud)

parallel-processing r plyr

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

重新排列R中的数据框列(mutate,dplyr)

我有一个像这样的数据框架

Type  Number  Species
A     1         G    
A     2         R 
A     7         Q
A     4         L
B     4         S
B     5         T
B     3         H
B     9         P
C     12        K
C     11        T
C     6         U
C     5         Q
Run Code Online (Sandbox Code Playgroud)

我在哪里使用过group_by(Type)我的目标是通过让NUMBER成为数字列中的前2个值,然后创建一个新的列(Number_2)作为第二个2值来折叠这些数据.此外,我希望删除底部两个数字的Species值,以便物种对应于我想使用dplyr的行中较高的数字,而final将看起来像这样

Type  Number Number_2   Species       
A     7    1               Q
A     4    2               L 
B     5    3               T
B     9    4               P
C     12   6               K
C     11   5               T
Run Code Online (Sandbox Code Playgroud)

截至目前,number_2所在的顺序并不重要,只要它是相同的类型....我不知道这是否可能,但如果它是谁有人知道如何...

谢谢!

r dataframe dplyr

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

了解sunburstR行为

data.frame看起来类似于这个例子:

> head(dd)
#  paths counts
#1     s   4735
#2    dt   4635
#3    so   2191
#4    sb   1949
#5 dt-dt   1310
#6   s-s    978
Run Code Online (Sandbox Code Playgroud)

其中路径中的不同步骤被分隔开-.如您所见,某些路径长度为1,有些路径> 1步(示例中最多5步).

现在我想sunburst使用sunburstR包将数据可视化为绘图.我是这样做的:

# devtools::install_github("timelyportfolio/sunburstR")
library(sunburstR)
sunburst(dd)
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不会产生任何输出,我不明白为什么.另一个例子,这可以按预期工作:

sunburst(tail(dd, 8))
Run Code Online (Sandbox Code Playgroud)

但这不是:

sunburst(tail(dd, 9))
Run Code Online (Sandbox Code Playgroud)

我也注意到了

sunburst(dd[c(5, 1:4),])
Run Code Online (Sandbox Code Playgroud)

产生一个情节,但令人惊讶的dt是,该类别被吐成两个块,通常应该在第一个(最里面)的水平上显示为一个块.

问:有人可以向我解释为什么会发生这种情况(有些方法可行,有些方法有效但有些工作但显示数据有些不正确)以及我需要做些什么来显示整个数据集(不仅仅是样本数据) ?

样本数据

dd <- structure(list(paths = c("s", "dt", "so", "sb", "dt-dt", "s-s", 
"so-dt", "dt-dt-dt", "sb-sb", "so-so", "s-s-s", "s-rd", "dt-dt-dt-dt", 
"s-sb", "a", "so-dt-dt", "s-rd-rd", "r", "dt-s", "so-sb", "dt-sb", …
Run Code Online (Sandbox Code Playgroud)

plot r sunburst-diagram

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

ggplot2:如何绘制正交回归线?

我已经在两种不同的视觉感知测试中测试了大量参与者——现在,我想看看这两种测试的表现在多大程度上相关。

为了可视化相关性,我使用 R 在 R 中绘制散点图ggplot()并拟合回归线(使用stat_smooth())。但是,由于 myxyvariable 都是性能度量,因此在拟合回归线时我需要同时考虑它们 - 因此,我不能使用简单的线性回归(使用stat_smooth(method="lm")),而是需要拟合正交回归(或 Total最小二乘法)。我该怎么做呢?

我知道我可以formula在中指定stat_smooth(),但我不知道要使用什么公式。据我了解,预设方法 ( lm, glm, gam, loess, rlm) 都不适用。

regression r ggplot2

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

从不同长度的不同数据集中查找纬度和经度的最近点

我有两个不同站的数据集.数据基本上是具有坐标,经度和纬度的数据框架.给定第一个数据集(反之亦然),我想找到其他数据集中每个站的最近站.我的主要问题是坐标没有排序,数据集的长度不同.例如,第一个包含2228个站,第二个包含1782个.所以,我不知道如何处理这个.我知道函数rdist.earth,我试图使用它.这是一个简短的例子:

      #First data set of stations
        set1 <- structure(list(lon = c(13.671114, 12.866947, 15.94223, 11.099736,  
         12.958342, 14.203892, 11.86389, 16.526674, 16.193064, 17.071392
        ), lat = c(48.39167, 48.148056, 48.721111, 47.189167, 47.054443, 
         47.129166, 47.306667, 47.84, 47.304167, 48.109444)), .Names = c("lon", 
       "lat"), row.names = c(NA, 10L), class = "data.frame")

      #Second data set
      set2 <- structure(list(lon = structure(c(14.4829998016357, 32.4000015258789, 
      -8.66600036621094, 15.4670000076294, 18.9160003662109, 19.0160007476807, 
      31.0990009307861, 14.3660001754761, 9.59899997711182, 11.0830001831055
       ), .Dim = 10L), lat = structure(c(35.8499984741211, 34.75, 70.9329986572266, 
      78.25, 69.6829986572266, 74.515998840332, 70.3659973144531, 67.265998840332, 
       63.6990013122559, 60.1990013122559), .Dim = 10L)), …
Run Code Online (Sandbox Code Playgroud)

r

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

提取每个月的第一个星期一

如何从2010-01-01到2015-12-31提取每个月的第一个星期一?

r date

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