我想重塑我的数据帧从长格式到宽格式,我放弃了一些我想保留的数据.对于以下示例:
df <- data.frame(Par1 = unlist(strsplit("AABBCCC","")),
Par2 = unlist(strsplit("DDEEFFF","")),
ParD = unlist(strsplit("foo,bar,baz,qux,bla,xyz,meh",",")),
Type = unlist(strsplit("pre,post,pre,post,pre,post,post",",")),
Val = c(10,20,30,40,50,60,70))
# Par1 Par2 ParD Type Val
# 1 A D foo pre 10
# 2 A D bar post 20
# 3 B E baz pre 30
# 4 B E qux post 40
# 5 C F bla pre 50
# 6 C F xyz post 60
# 7 C F meh post 70
dfw <- dcast(df,
formula = Par1 + …Run Code Online (Sandbox Code Playgroud) 尝试使用ggplot将多行绘制成一个图形,但不确定如何使用我的数据集.不确定我是否需要更改数据结构(转置?)
数据如下所示:
Company 2011 2013
Company1 300 350
Company2 320 430
Company3 310 420
Run Code Online (Sandbox Code Playgroud)
我也试过它转置:
Year Company1 Company2 Company3
2011 300 320 310
2013 350 430 420
Run Code Online (Sandbox Code Playgroud)
为此我可以使用绘制1个值;
ggplot(data=df, aes(x=Year, y=Company1)) + geom_line(colour="red") + geom_point(colour="red", size=4, shape=21, fill="white")
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将所有公司合并,因为我没有对象'公司'了.有什么建议?
任何人都可以帮我弄清楚如何更改传递给未来包中的项目的全局对象的最大大小?
这是一个无用的例子,显示了我的观点
library(future)
a = 1:200000000
object.size(a)
test %<-% head(a)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
getGlobalsAndPackages中的错误(expr,envir = envir,persistent = persistent,:为将来的表达式('head(a)')需要导出的所有全局对象的总大小为762.95 MiB.这超出了允许的最大大小500.00 MiB(选项'future.global.maxSize').有两个全局变量:'a'(762.94 MiB类'numeric')和'head'(10.05 KiB类'function').
任何人都可以帮我理解如何调整future.global.maxSize选项吗?我试过options(future.global.maxSize = 1500000)但是没用.
我想基于因子列添加一列均值R data.frame.像这样:
df1 <- data.frame(X = rep(x = LETTERS[1:2], each = 3), Y = 1:6)
df2 <- aggregate(data = df1, Y ~ X, FUN = mean)
df3 <- merge(x = df1, y = df2, by = "X", suffixes = c(".Old",".New"))
df3
# X Y.Old Y.New
# 1 A 1 2
# 2 A 2 2
# 3 A 3 2
# 4 B 4 5
# 5 B 5 5
# 6 B 6 5
Run Code Online (Sandbox Code Playgroud)
要完成这个问题,我要创建两个不必要的data.frames.我想知道一种方法,可以通过因子列将一列方法附加到我的原始列中 …
我有一个数据框,遵循以下长模式:
Name MedName
Name1 atenolol 25mg
Name1 aspirin 81mg
Name1 sildenafil 100mg
Name2 atenolol 50mg
Name2 enalapril 20mg
Run Code Online (Sandbox Code Playgroud)
并希望得到以下(我不在乎我是否可以这样命名列,只是想要这种格式的数据):
Name medication1 medication2 medication3
Name1 atenolol 25mg aspirin 81mg sildenafil 100mg
Name2 atenolol 50mg enalapril 20mg NA
Run Code Online (Sandbox Code Playgroud)
通过这个网站,我已经熟悉了reshape/reshape2包,并经历了多次尝试,试图让它工作,但迄今为止失败了.
当我尝试时,dcast(dataframe, Name ~ MedName, value.var='MedName')我只得到一堆列为药物名称的标志(转换的值为1或0)示例:
Name atenolol 25mg aspirin 81mg
Name1 1 1
Name2 0 0
Run Code Online (Sandbox Code Playgroud)
我在尝试dcast(dataset, Name ~ variable)融化数据集后尝试过,但这只是吐出以下内容(只计算每个人有多少药物):
Name MedName
Name1 3
name2 2
Run Code Online (Sandbox Code Playgroud)
最后,我试图融化数据,然后重塑使用idvar="Name" timevar="variable"(其中所有只是Mednames),但是这似乎不是为我的问题构建的,因为如果有多个匹配到idvar,重塑只需要第一个MedName并忽略休息.
有谁知道如何使用重塑或其他R功能这样做?我意识到可能有一种方法以更杂乱的方式执行此操作,其中一些for循环和条件基本上分割并重新粘贴数据,但我希望有一个更简单的解决方案.非常感谢!
我是R新手,我正试图从较大的数据框(50K行,215列)中删除重复的列.框架具有离散的连续和分类变量的混合.
我的方法是为框架中的每一列生成一个表到一个列表,然后使用该duplicated()函数在列表中查找重复的行,如下所示:
age=18:29
height=c(76.1,77,78.1,78.2,78.8,79.7,79.9,81.1,81.2,81.8,82.8,83.5)
gender=c("M","F","M","M","F","F","M","M","F","M","F","M")
testframe = data.frame(age=age,height=height,height2=height,gender=gender,gender2=gender)
tables=apply(testframe,2,table)
dups=which(duplicated(tables))
testframe <- subset(testframe, select = -c(dups))
Run Code Online (Sandbox Code Playgroud)
这不是非常有效,特别是对于大型连续变量.但是,我已经走了这条路线,因为我无法使用摘要得到相同的结果(注意,以下假定原始testframe包含重复项):
summaries=apply(testframe,2,summary)
dups=which(duplicated(summaries))
testframe <- subset(testframe, select = -c(dups))
Run Code Online (Sandbox Code Playgroud)
如果您运行该代码,您将看到它只删除找到的第一个副本.我认为这是因为我做错了什么.任何人都可以指出我出错的地方,或者更好的是,我指出了从数据框中删除重复列的更好方法的方向?
我试图看看是否有一个函数来直接获得负数的真正立方根.例如,在Java中,有Math.cbrt()功能.我正在寻找R中的等价物.
否则,我目前的黑客是:
x <- -8
sign(x) * abs(x)^(1/3)
Run Code Online (Sandbox Code Playgroud)
每次打字都非常不优雅和麻烦.谢谢!
我发现当coord_flip()使用ggplot2 添加到某些图时,图例中值的顺序不再与图中值的顺序对齐.
例如:
dTbl = data.frame(x=c(1,2,3,4,5,6,7,8),
y=c('a','a','b','b','a','a','b','b'),
z=c('q','q','q','q','r','r','r','r'))
print(ggplot(dTbl, aes(x=factor(y),y=x, fill=z)) +
geom_bar(position=position_dodge(), stat='identity') +
coord_flip() +
theme(legend.position='top', legend.direction='vertical'))
Run Code Online (Sandbox Code Playgroud)

我希望在不改变图中'q'和'r'的顺序的情况下反转图例中的'q'和'r'.
scale.x.reverse() 看起来很有希望,但似乎并没有在因素范围内起作用(就像这个条形图的情况一样).
我有一个很长的数据集我想扩大,我很好奇是否有一种方法可以使用R中的reshape2或tidyr包一步完成所有这些操作.
数据框df如下所示:
id type transactions amount
20 income 20 100
20 expense 25 95
30 income 50 300
30 expense 45 250
Run Code Online (Sandbox Code Playgroud)
我想谈谈这个问题:
id income_transactions expense_transactions income_amount expense_amount
20 20 25 100 95
30 50 45 300 250
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过reshape2来获得部分路径,例如:
dcast(df, id ~ type, value.var="transactions")
Run Code Online (Sandbox Code Playgroud)
但有没有办法一次性重塑整个df,同时解决"交易"和"金额"变量?理想情况下,新的更合适的列名称?
我试图解决的问题是我有一个数据框,其中包含一个排序的POSIXct变量.每行都被分类,我想获得每个级别的每一行之间的时间差异,并将该数据添加回一个新变量.可重现的问题如下.以下功能仅用于为此问题创建具有随机时间的样本数据.
random.time <- function(N, start, end) {
st <- as.POSIXct(start)
en <- as.POSIXct(end)
dt <- as.numeric(difftime(en, st, unit="sec"))
ev <- sort(runif(N, 0, dt))
rt <- st + ev
return(rt)
}
Run Code Online (Sandbox Code Playgroud)
模拟问题的代码如下:
set.seed(123)
category <- sample(LETTERS[1:5], 20, replace=TRUE)
randtime <- random.time(20, '2015/06/01 08:00:00', '2015/06/01 18:00:00')
df <- data.frame(category, randtime)
Run Code Online (Sandbox Code Playgroud)
预期的结果数据框如下:
>category randtime timediff (secs)
>A 2015-06-01 09:05:00 0
>A 2015-06-01 09:06:30 90
>A 2015-06-01 09:10:00 210
>B 2015-06-01 10:18:58 0
>B 2015-06-01 10:19:58 60
>C 2015-06-01 08:14:00 0
>C 2015-06-01 08:16:30 …Run Code Online (Sandbox Code Playgroud)