假设我有一个data.table如下 - :
data = data.table(c("a","a","b","b","c"),c(1,2,3,4,5))
Run Code Online (Sandbox Code Playgroud)
我想总结数值向量,只有当因子向量有多个条目时.我遇到的问题需要使用.SD.我知道我可以创建一个N场
data[ , N := .N, by = V1]
Run Code Online (Sandbox Code Playgroud)
然后总结
data[N > 1, lapply(.SD,sum), by = V1, .SDcols = 2]
Run Code Online (Sandbox Code Playgroud)
但是,有一个步骤要求这样做吗?
在通话中引用.SD不会返回答案 -
data[, lapply(.SD[which(length(.SD)>1)],sum), by = V1, .SDcols = 2]
Run Code Online (Sandbox Code Playgroud)
我想明白为什么这不起作用.也不 -
data[, lapply(.SD[which(.N>1)],sum), by = V1, .SDcols = 2]
Run Code Online (Sandbox Code Playgroud)
谢谢!
我是R的新手,无法弄清楚我在下面的代码中可能做错了什么以及如何加快速度.我有一个数据集,并希望添加一个包含从两列数据计算的平均值的列.请看下面的代码(警告:可能需要一些时间来阅读我的问题,但代码在R中正常运行):
首先让我定义一个数据集df(我再次为代码的长描述道歉)
> df<-data.frame(prediction=sample(c(0,1),10,TRUE),subject=sample(c("car","dog","man","tree","book"),10,TRUE))
> df
prediction subject
1 0 man
2 1 dog
3 0 man
4 1 tree
5 1 car
6 1 tree
7 1 dog
8 0 tree
9 1 tree
10 1 tree
Run Code Online (Sandbox Code Playgroud)
接下来,我将一个名为subjectRate的新列添加到df中
df$subjectRate <- with(df,ave(prediction,subject))
> df
prediction subject subjectRate
1 0 man 0.0
2 1 dog 1.0
3 0 man 0.0
4 1 tree 0.8
5 1 car 1.0
6 1 tree 0.8
7 1 dog 1.0
8 …Run Code Online (Sandbox Code Playgroud) 我有一个数据框,每行是关于瞳孔的观察.数据框中的一个向量是学校的id.我已经获得了一个新的载体,每个学校的计数如下:
tbsch <- table(dt$school)
Run Code Online (Sandbox Code Playgroud)
现在我想将相关的计数值添加到每一行dt.我已经使用for()循环遍历每一行dt并创建一个包含相关计数的新向量并最终使用cbind()它来添加它dt,但我认为这是非常低效的.有这么聪明/简单的方法吗?
我有一份清单data.frames.在每个data.frame中,我想通过grouping(z)运行一个函数进行拆分,将结果放回原处,然后将嵌套的所有结果lapply放在data.frame中,然后将结果列表展平data.frame为一个data.frame.
library(plyr)
df <- data.frame(x = sample(1:200, 30000, replace = TRUE),
y = sample(1:200, 30000, replace = TRUE),
z = sample(LETTERS, 30000, replace = TRUE))
alist <- list(df,df,df) # longer in real life
answer <- lapply(alist, function(q) {
a <- split(q,q$z)
result.1 <- lapply(a, function(w) {
neww <- cbind(w[,1],w[,2])
result.2 <- colSums(neww)
})
ldply(result.1)
})
# cor(neww) can actually be a variey of foos I just use cor() for easy …Run Code Online (Sandbox Code Playgroud) 我试图在我的函数体内连接我函数的参数,以便在bode中进一步评估.我经历了许多代码改进试图解决问题,但不能.
Example:当提供函数调用时fun(x,y),我希望能够粘贴我输入的字符x, $以及我为y输入的字符,以调用数据集中的字段进行分析.因此,如果我car为参数x和toyota参数提供了字符y,我将获得car$toyota在函数体内使用的变量名.
我试过了:
gtData <- function(data,field,k)
d <- diff(data$field) ## I also tried sum(data$field) to eliminate issues with diff()
Run Code Online (Sandbox Code Playgroud)
但d评估为0 ##我知道这不是因为当我运行代码时,diff(car$toyota)我得到了正确的答案.我不认为它做我想做的事.我还尝试将参数粘贴到正文中,如下所示:
gtData(data,field,k)
a <- paste(data,"$",field)
Run Code Online (Sandbox Code Playgroud)
抱怨toyota不存在因为丰田不是数据集而是数据集中的字段.
我尝试了很多其他变种,似乎paste()不能做我想要它做的事情.
我想要得到的是字符串,car$toyota所以我可以将它作为变量进一步传递到身体进一步评估.
我有一个csv文件并使用提取数据
banknifty <- as.xts(read.zoo("banknifty.csv",sep=",",tz="" ,header=T))
Run Code Online (Sandbox Code Playgroud)
read.zoo()使用数值提取数据框,但在我应用时as.xts(),data. frame数字值将转换为字符.
# banknifty[1,] gives
2008-01-01 09.34:00 "10" "12" "13"
Run Code Online (Sandbox Code Playgroud)
我想要as.xts返回data.frame数值.如何避免这个问题?
我有第1列和第2列(ID和值).接下来我想要一个count列,列出每个id出现相同值的次数.如果它不止一次出现,它显然会重复该值.此数据集中还有其他变量,但新计数变量只需要有2个条件.我已经浏览了这个博客,但我找不到一种方法来使新变量以多个变量为条件.
ID Value Count
1 a 2
1 a 2
1 b 1
2 a 2
2 a 2
3 a 1
3 b 3
3 b 3
3 b 3
Run Code Online (Sandbox Code Playgroud)
先感谢您!
我需要绘制三条线(在一张图上),每条线代表一个实验室团队的数据(两个变量/团队).理想情况下,图形应该看起来美观(因此使用ggplot2!),但形式与下图所示的线图相似.我不明白如何使用gggplot2库将多行绘制到单个图形上.我目前对ggplot2库的知识/技能很低,但我在下面列出了我的初出茅庐的努力.
http://www.harding.edu/fmccown/r/#linecharts
编辑:每行由两个向量构成,如下所示:
temp = c(4, 25, 50, 85, 100)
enzyme_activity = c(0.543, 0.788, 0.990, 0.898, 0.882)
Run Code Online (Sandbox Code Playgroud)
在x轴上使用temp变量,每行使用不同的颜色,以便区分它们.
EDIT2:
amyA = c(0.091, 0.147, 0.202, 0.236, 0.074)
temp = c(4, 23, 37, 65, 100)
df = data.frame(temp, amyA)
ggplot(df, aes(x = temp, y = amyA, col = 'blue')) + geom_line()
Run Code Online (Sandbox Code Playgroud)
第二次编辑中的代码不会生成蓝线,并且图例完全错误.如果我用不同的数据重复两个ggplot调用,则只绘制一行.
我正在寻找一种解决方案来添加"desired_result"列,最好使用dplyr和/或ave().请参阅此处的数据框,其中组是"section",我希望我的"desired_results"列按顺序计数的唯一实例位于"exhibit"中:
structure(list(section = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), exhibit = structure(c(1L,
2L, 3L, 3L, 1L, 2L, 2L, 3L), .Label = c("a", "b", "c"), class = "factor"),
desired_result = c(1L, 2L, 3L, 3L, 1L, 2L, 2L, 3L)), .Names = c("section",
"exhibit", "desired_result"), class = "data.frame", row.names = c(NA,
-8L))
Run Code Online (Sandbox Code Playgroud) 我正在努力通过一些参考专栏将一个数据表的元素与另一个"主"集合在一起.为了使事情更清楚,我创建了一些示例数据:
这是我想要加入另一个"主集"的数据集.
data.frame(refID = c(1,3,4,5,7,8), value = c(3.3,3.9,4.4,8.0,1.1,2.5))
refID value
1 3.3
3 3.9
4 4.4
5 8.0
7 1.1
8 2.5
Run Code Online (Sandbox Code Playgroud)
主集:
data.frame(refID = 1:9, value = rep(0,9))
refID value
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
Run Code Online (Sandbox Code Playgroud)
我基本上希望将第一个数据集中的值列发送到第二个数据集,但是如果存在间隙,则让它们的值为0.最终,我希望得到:
结果集:
refID value
1 3.3
2 0.0
3 3.9
4 4.4
5 8.0
6 0.0
7 1.1
8 2.5
9 0.0
Run Code Online (Sandbox Code Playgroud)
我打得周围的一些东西dplyr和data.table包,但似乎无法真正找出这样做的一个很好的和直接的方式.非常感谢建议,非常感谢.
r ×10
dataframe ×4
data.table ×2
dplyr ×2
data-mining ×1
ggplot2 ×1
join ×1
lapply ×1
list ×1
performance ×1
xts ×1