我需要这个社区的R专家的帮助:set。种子(1234)x
我想得到这个输出:
id value1 value2 year
1 9 -3 2
1 1 0 3
1 2 -1 4
2 -2 2 2
2 -3 2 3
2 6 0 4
3 -1 0 2
3 3 0 3
4 5 0 2
5 2 1 2
谢谢你的帮助!
考虑by
(按因子子集数据帧的函数),并让它调用subset
(过滤掉第1年)和中的(重新计算列)。从那里,
by
返回一个数据帧列表,您可以通过wtihdo.call(rbind,…)
完全绑定这些数据帧。
数据
txt = 'id value1 value2 year
1 1 4 1
1 10 1 2
1 2 4 3
1 3 3 4
2 4 1 1
2 2 3 2
2 1 3 3
2 10 1 4
3 4 5 1
3 3 5 2
3 7 5 3
4 4 2 1
4 9 2 2
5 5 3 1
5 7 4 2'
df1 <- read.table(text=txt, header=TRUE)
过程
df_list <- by(df1, df1$id, function(sub){
subset(
within(sub, {
value1 <- value1 - value1[[1]]
value2 <- value2 - value2[[1]]
}),
year > 1
)
})
new_df <- data.frame(do.call(rbind, unname(df_list)),
row.names = NULL)
new_df
# id value1 value2 year
# 1 1 9 -3 2
# 2 1 1 0 3
# 3 1 2 -1 4
# 4 2 -2 2 2
# 5 2 -3 2 3
# 6 2 6 0 4
# 7 3 -1 0 2
# 8 3 3 0 3
# 9 4 5 0 2
# 10 5 2 1 2
按“id”分组后,使用mutate_at
计算值之间的差异,其中“value”列上的“year”为1,然后过滤
out行中的“year”为1
library(dplyr)
df1 %>%
group_by(id) %>%
mutate_at(vars(value1:value2), funs(. -.[year == 1])) %>%
filter(year!= 1)
# A tibble: 10 x 4
# Groups: id [5]
# id value1 value2 year
# <int> <int> <int> <int>
# 1 1 9 -3 2
# 2 1 1 0 3
# 3 1 2 -1 4
# 4 2 -2 2 2
# 5 2 -3 2 3
# 6 2 6 0 4
# 7 3 -1 0 2
# 8 3 3 0 3
# 9 4 5 0 2
#10 5 2 1 2
或者具有< code>data.table的类似逻辑
library(data.table)
setDT(df1)[, (2:3) := lapply(.SD, function(x) x - x[year == 1]),
by = id, .SDcols = value1:value2][year != 1]
在基数R
中,我们可以做
nm1 <- c('value1', 'value2')
df1[nm1] <- df1[nm1] -df1[df1$year==1,
nm1][rep(seq_along(unique(df1$id)), table(df1$id)),]
df1[df1$year != 1,]
df1 <- structure(list(id = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L,
3L, 4L, 4L, 5L, 5L), value1 = c(1L, 10L, 2L, 3L, 4L, 2L, 1L,
10L, 4L, 3L, 7L, 4L, 9L, 5L, 7L), value2 = c(4L, 1L, 4L, 3L,
1L, 3L, 3L, 1L, 5L, 5L, 5L, 2L, 2L, 3L, 4L), year = c(1L, 2L,
3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 1L, 2L, 1L, 2L)), class =
"data.frame", row.names = c(NA, -15L))
我有两个数据帧,我们称它们为A和B。它们有完全相同的7列(我们称它们为col1、col2、col3、col4、col5、col6和col7)。有些栏目包括客户id、客户名、客户姓、电话号码等(出于保密目的,我无法透露确切的姓名)。 DataFrame A比DataFrame B大得多,DataFrame B中的一些条目包含在DataFrame A中(即DataFrame A)。DataFrame
我有一个熊猫,如下所示: 我想按进行分组并获取每个组的第一行: 预期成果: 我尝试了下面的方法,它只给出了< code>DataFrame的第一行。任何关于这方面的帮助都将不胜感激。
如何移除第一个数组但返回减去第一个元素的数组 在我的示例中,当删除第一个元素时,我应该得到
问题内容: 我已经迷上了一些SQL,其中有几行数据,我想从上一行中减去一行,并使其一直向下重复。 所以这是表格: 我希望结果显示第三列,称为差异,即从下面的一列减去第一行,最后一行从零减去。 我已经尝试过自我连接,但是我不确定如何限制结果,而不是让结果不断循环。我不能确定id值对于给定的结果集是连续的,所以我不使用该值。我可以扩展架构以包括某种顺序值。 这是我尝试过的: 谢谢您的协助。 问题答案:
问题内容: 我要执行的操作类似于合并。例如,通过合并,我们得到一个数据帧,其中包含第一个AND第二个数据帧中存在的行。通过合并,我们得到一个数据帧,该数据帧在第一个或第二个数据帧中都存在。 我需要的是一个数据帧,其中包含第一个数据帧中存在的行而第二个数据帧中不存在的行?有快速而优雅的方法吗? 问题答案: 如下所示呢? 只要有一个非关键的通用命名列,就可以让在sufffexes上执行的工作(如果没有
问题内容: 我只想知道如何从$ row [posts_remaining]中出现的数字中减去1 换一种说法… 这将给我我的结果,其中row posts_remaining = {THE NUMBER} 但是我想通过从中减去一个数字,然后在旧数字所在的位置设置新数字来更新返回的数字。 我希望我不要让这个令人困惑。很难解释。 另外…为了进行此操作,我是否应该将行“ posts_remaining”设置