假设您有以下两个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) 我有一个问题让我发疯,真的需要你的帮助.简化的问题是这样的:
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) 我有两张关于人的数据表:
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中的变量?例如,如果我这样做,
plot <- boxplot(count ~ spray, data = InsectSprays, col = "lightgray")
Run Code Online (Sandbox Code Playgroud)
当我调用图时,我希望它显示箱形图,不需要每次都运行绘制箱形图的命令。
有谁有想法吗?
我想在函数中使用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) 我有一个像这样的数据框架
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所在的顺序并不重要,只要它是相同的类型....我不知道这是否可能,但如果它是谁有人知道如何...
谢谢!
我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) 我已经在两种不同的视觉感知测试中测试了大量参与者——现在,我想看看这两种测试的表现在多大程度上相关。
为了可视化相关性,我使用 R 在 R 中绘制散点图ggplot()并拟合回归线(使用stat_smooth())。但是,由于 myx和yvariable 都是性能度量,因此在拟合回归线时我需要同时考虑它们 - 因此,我不能使用简单的线性回归(使用stat_smooth(method="lm")),而是需要拟合正交回归(或 Total最小二乘法)。我该怎么做呢?
我知道我可以formula在中指定stat_smooth(),但我不知道要使用什么公式。据我了解,预设方法 ( lm, glm, gam, loess, rlm) 都不适用。
我有两个不同站的数据集.数据基本上是具有坐标,经度和纬度的数据框架.给定第一个数据集(反之亦然),我想找到其他数据集中每个站的最近站.我的主要问题是坐标没有排序,数据集的长度不同.例如,第一个包含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)