当前位置: 首页 > 知识库问答 >
问题:

基于顺序行值创建新数据帧

习洲
2023-03-14

我有一个由名字和年份组成的dataframe,并有一个虚拟变量来判断名字是否发生在一年中。

    null
   Name x2017 x2018 x2019
1 Terry     1     1     0
2   Sam     0     0     1
3   Nic     0     1     1
4 Sarah     0     1     1
data.frame(
  Name = c("Terry", "Sam", "Nic", "Sarah"), 
  x2017 = c(1, 0, 0, 0), 
  x2018 = c(1, 0, 1, 1), 
  x2019 = c(0, 1, 1, 1)
  )
  Year Total New
1 2017     1   1
2 2018     3   2
3 2019     3   1

谢谢!

共有1个答案

弓智明
2023-03-14

也许这就是你要找的:

  1. 使用tidy::pivot_longe
  2. 将形状重新设置为长格式
  3. 名称分组,并使用DPLYR::LAG添加个人是否为新人的指示符
  4. 按年份汇总
d <- data.frame(
  Name = c("Terry", "Sam", "Nic", "Sarah"), 
  x2017 = c(1, 0, 0, 0), 
  x2018 = c(1, 0, 1, 1), 
  x2019 = c(0, 1, 1, 1)
) 

library(dplyr)
library(tidyr)

d %>% 
  tidyr::pivot_longer(-Name, names_to = "year") %>% 
  mutate(year = gsub("^x", "", year)) %>%
  group_by(Name) %>% 
  mutate(new = as.numeric(value == 1 & lag(value) == 0),
         new = ifelse(is.na(new), value, new)) %>% 
  ungroup() %>% 
  group_by(year) %>% 
  summarise(total = sum(value), new = sum(new))
#> # A tibble: 3 x 3
#>   year  total   new
#>   <chr> <dbl> <dbl>
#> 1 2017      1     1
#> 2 2018      3     2
#> 3 2019      3     1
 类似资料:
  • 恕我直言,我是一名未经培训、仅录制宏的VBA用户。我试着到处捡零碎的东西,但我还是个十足的傻瓜。请给我指出正确的方向! 在每一行上,零件编号(E列)应与源和地址(G和H列)以及描述(I列)相关联。我说“应该”,但实际上,不是每个零件编号一个源/地址组合,在许多文件中,在某些行上有多达15个不同的源/地址组合,源/地址组合列在相邻的列J/K、L/M、N/O等中,这将描述列推向右侧。 我需要找到一种V

  • 我有一个pandas dataframe,需要根据dataframe中其他列的值创建新列。这是数据帧 人城市国家国家 美国伊利诺伊州芝加哥 美国亚利桑那州凤凰城B酒店 C美国加利福尼亚州圣地亚哥 我想根据state中的值创建两个新列 创建新列df[“城北”]=df[“城市”]其中state=“伊利诺伊” 创建新列df[“城市南部”]=df[“城市”],其中州不等于“伊利诺伊州” 我试过了 但是不等

  • 我想将我的自定义函数(它使用if-else梯形)应用到数据帧每行中的这六列(,,,,,)。 我已经尝试了不同的方法从其他问题,但似乎仍然不能找到正确的答案,我的问题。关键的一点是,如果这个人被算作西班牙裔,他们就不能算作其他任何东西。即使他们在另一个种族栏中有一个“1”,他们仍然被算作西班牙裔,而不是两个或两个以上的种族。类似地,如果所有ERI列的总和大于1,则被计为两个或两个以上的种族,不能被计

  • 我有以下2张表: 我想显示所有的汽车,由desc订购,但也由从透视表订购。修复的条目可以具有许多特定的。 所以如果是created_at,并且是created_at,但是修复中的在,我想显示BEFORE,因为关系是较新的。 我也不想从关系表中加载数据。 我试过以下方法: 和 ^此查询返回修复表中的所有项,即使字段为。我不能把他们分组。

  • 我有一个名为“segments”的数据帧,看起来像这样: 我想让它看起来像这样。其中Outdegree是包含列A中的值的行数,例如10135在3行中,因此每行Outdegree设置为3: 以下是我正在尝试但不起作用的内容: 该代码将所有行相加,并将总计值提供给OUTDEGREE列

  • 有没有办法在刷新Spring上下文后找出bean创建顺序(或至少依赖顺序)? 只要简单的bean定义顺序就可以了。我不想要他们注册的顺序。我想要创建它们的顺序(依赖关系树)