data <- data.frame(val=c(rep(6,10), rep(7, 15), rep(8, 20), rep(9, 25), rep(10, 100), rep(11, 20), rep(12, 15), rep(13, 10)))
data$plus <- data$val + 100
table <- table(data$val)
df1 <- data.frame(val = as.integer(names(table)[1:length(table)]), N = table[1:length(table)])
df2 <- merge(data, df1)
df3 <- do.call(rbind, by(df2, list(df2$val), FUN=function(x) head(x, 1)))
bys val plus: egen max = _N
bys val plus: gen first = _n==1
keep if first==1
有没有一种方法可以简化或使R代码更优雅?
下面是一个使用“data.table”的方法:
library(data.table)
as.data.table(data)[, N := .N, by = val][, .SD[1], by = val]
# val plus N
# 1: 6 106 10
# 2: 7 107 15
# 3: 8 108 20
# 4: 9 109 25
# 5: 10 110 100
# 6: 11 111 20
# 7: 12 112 15
# 8: 13 113 10
## Or (@RicardoSaporta)
as.data.table(data)[, list(.N, plus=plus[1]), by = val]
## Or (@DavidArenburg)
unique(as.data.table(data)[, N := .N, by = val], by = "val")
使用“dplyr”,您可以尝试:
library(dplyr)
data %>%
group_by(val) %>%
mutate(N = n()) %>%
slice(1)
在底座R中,我想你可以尝试这样的方法:
do.call(rbind, lapply(split(data, data$val),
function(x) cbind(x, N = nrow(x))[1, ]))
这是我之前问题的后续:如何提取每个组的前n行并使用该子集计算函数? 另一篇相关文章:如何提取每组的前n行? 我有以下数据: 我想在特定索引处按组对这些数据应用一个函数,其中函数输出取决于子集化的数据帧。然后,我想用不同的分组变量对结果data.table进行分组,并取一个简单的平均值。 我是否希望首先在子集化的行上按组1计算我的函数,r bind列出结果,然后按组2计算平均值? 还是我想先rbin
我有一个任务来做一个函数,它只接收一个整数和一个整数列表(不能添加任何其他内容)。它应该返回列表中求和为k的组合数,顺序无关紧要(硬币更换问题)。另外,我需要使用递归。我是这么做的: 问题是它将同一个组合求和多次。例如 返回9。 它应该返回4(1111111221112,5)。
问题内容: 我需要在每笔 数据中都计算唯一值 我尝试 但是我想得到 问题答案: 您需要: 如果需要字符: 或正如乔恩所说: 您可以像这样保留列名: 区别在于返回一个Series并返回一个DataFrame。
问题内容: 我正在尝试计算由文本字段接收的输入填充的数组的总数,均值和中位数。我设法算出了总数和均值,但我只是无法获得中位数。我认为在执行此操作之前需要对数组进行排序,但是我不确定如何执行此操作。这是问题吗,还是我没有找到另一个问题?这是我的代码: 问题答案: Java中的Arrays类具有静态的排序功能,您可以使用调用该功能。
我试图计算由TextField接收的输入填充的数组的总数、平均值和中位数。我已经算出了总数和平均数,但中位数无法计算出来。我认为在我可以这样做之前需要对数组进行排序,但我不确定如何这样做。是这个问题,还是还有一个我没有找到的?下面是我的代码:
我有以下数据帧(示例): 我想创建一个名为“斜率”的列,它显示每组每n(n=3)天的斜率。这意味着当第一个日期是“2022-09-01”和3天后用于计算时。斜率可以使用“diff_days”(通过与每组第一个值的差异计算)和“值”列来计算。以下是所需的输出: 以下是一些示例计算,可为您提供一个想法: A组前3天:斜率([0,1,3],[2,1,3])=0.43 A组3天后:斜率([5,6,6],[