小编Aru*_*run的帖子

在一次通话中使用.N和.SD

假设我有一个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 data.table

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

使用R中的一些hashmap方法有效地更新数据帧列

我是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)

performance r data-mining dataframe

3
推荐指数
1
解决办法
621
查看次数

将因子的计数添加到数据帧

我有一个数据框,每行是关于瞳孔的观察.数据框中的一个向量是学校的id.我已经获得了一个新的载体,每个学校的计数如下:

tbsch <- table(dt$school)
Run Code Online (Sandbox Code Playgroud)

现在我想将相关的计数值添加到每一行dt.我已经使用for()循环遍历每一行dt并创建一个包含相关计数的新向量并最终使用cbind()它来添加它dt,但我认为这是非常低效的.有这么聪明/简单的方法吗?

r dataframe

3
推荐指数
1
解决办法
3327
查看次数

嵌套lapply性能,如何优化?

我有一份清单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)

r list lapply

3
推荐指数
2
解决办法
1191
查看次数

粘贴函数体中使用的函数参数的名称

我试图在我的函数体内连接我函数的参数,以便在bode中进一步评估.我经历了许多代码改进试图解决问题,但不能.

Example:当提供函数调用时fun(x,y),我希望能够粘贴我输入的字符x, $以及我为y输入的字符,以调用数据集中的字段进行分析.因此,如果我car为参数xtoyota参数提供了字符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所以我可以将它作为变量进一步传递到身体进一步评估.

r

3
推荐指数
1
解决办法
1753
查看次数

xts将数据帧转换为字符

我有一个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数值.如何避免这个问题?

r xts

3
推荐指数
2
解决办法
2747
查看次数

使用R:创建一个新列,计算"n"个其他列的'n'条件发生的次数

我有第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)

先感谢您!

r

3
推荐指数
1
解决办法
1978
查看次数

使用ggplot2构建折线图

我需要绘制三条线(在一张图上),每条线代表一个实验室团队的数据(两个变量/团队).理想情况下,图形应该看起来美观(因此使用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调用,则只绘制一行.

r ggplot2

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

R - 添加在组内按顺序计数但在重复时重复的列

我正在寻找一种解决方案来添加"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)

r dataframe dplyr

3
推荐指数
2
解决办法
943
查看次数

有没有办法在将一个data.frame连接到另一个data.frame时替换匹配行上的列值?

我正在努力通过一些参考专栏将一个数据表的元素与另一个"主"集合在一起.为了使事情更清楚,我创建了一些示例数据:

这是我想要加入另一个"主集"的数据集.

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)

我打得周围的一些东西dplyrdata.table包,但似乎无法真正找出这样做的一个很好的和直接的方式.非常感谢建议,非常感谢.

join r dataframe dplyr data.table

3
推荐指数
1
解决办法
1995
查看次数

标签 统计

r ×10

dataframe ×4

data.table ×2

dplyr ×2

data-mining ×1

ggplot2 ×1

join ×1

lapply ×1

list ×1

performance ×1

xts ×1