Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从分组数据中的不同行创建列

从分组数据中的不同行创建列
EN

Stack Overflow用户
提问于 2021-07-21 18:23:14
回答 3查看 79关注 0票数 1

我需要做一个新的列,以某种方式粘贴数据从cols 2到6(用空格分隔)只用于非NAs(每个组只有一个非NAs条目)。

下面是我的数据的前两组(按"game.event“分组)的dput。在每一行中,所创建的所需列应具有以下内容:

对于组279310中的所有game.event行,对于279315组中的所有游戏事件行,新的col应该返回:" NULL“,新的col应该返回:”淡出肩滚/飞卷“。

最后一件事。这两个组每个组有6行,在大多数情况下这是正常的,但我认为有些game.event组可能有5行。

dput:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    structure(list(game.event = c("279310", "279310", "279310", "279310", 
    "279310", "279310", "279315", "279315", "279315", "279315", "279315", 
    "279315"), L1 = c("NULL", NA, NA, NA, NA, NA, "Fade - Back Shoulder", 
    NA, NA, NA, NA, NA), L2 = c(NA, "NULL", NA, NA, NA, NA, NA, "Curl", 
    NA, NA, NA, NA), R2 = c(NA, NA, NA, "NULL", NA, NA, NA, NA, NA, 
    "Out", NA, NA), R1 = c(NA, NA, "NULL", NA, NA, NA, NA, NA, "Go/Fly", 
    NA, NA, NA), B = c(NA, NA, NA, NA, "NULL", NA, NA, NA, NA, NA, 
    NA, "Curl")), row.names = c(NA, -12L), class = c("tbl_df", "tbl", 
    "data.frame"))

dplyr的答案是想要的,但会接受任何有效的!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-07-21 19:21:21

我们可以通过'game.event‘在group_split上循环使用map,在list上使用map循环,在'game.event’以外的列中unlist,删除NAs (na.omit)和paste (str_c -)以在tibble中进行总结,用_dfrmap中绑定list元素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(dplyr)
library(purrr)
library(stringr)
df %>% 
   group_split(game.event) %>%
   map_dfr(~ tibble(game.event = first(.x$game.event),
      new = str_c(na.omit(unlist(.x[-1])), collapse= " ")))
# A tibble: 2 x 2
  game.event new                                      
  <chr>      <chr>                                    
1 279310     NULL NULL NULL NULL NULL                 
2 279315     Fade - Back Shoulder Curl Out Go/Fly Curl

或者另一种选择是使用nest_bytransmute,方法是对'data‘列进行unlist,并对非NA元素使用paste

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df %>% 
   nest_by(game.event) %>%
   transmute(new = str_c(na.omit(unlist(data)), collapse=" ")) %>% 
   ungroup
# A tibble: 2 x 2
  game.event new                                      
  <chr>      <chr>                                    
1 279310     NULL NULL NULL NULL NULL                 
2 279315     Fade - Back Shoulder Curl Out Go/Fly Curl

更新

如果我们想为只有NA的列添加占位符,我们可以将其中一个元素替换为字符"NA",因此它不会被na.omit删除。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df1 %>% 
    group_by(game.event) %>%
    mutate(across(everything(), ~ if(all(is.na(.))) c("NA", .[-1]) else .)) %>% 
    nest() %>%
    transmute(new = str_c(na.omit(unlist(data)), collapse=" ")) %>% 
    ungroup
# A tibble: 1 x 2
  game.event new                   
  <chr>      <chr>                 
1 2793135    Curl Curl NA Curl NULL

数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df1 <- structure(list(game.event = c("2793135", "2793135", "2793135", "2793135", "2793135", "2793135"), L1 = c(NA, NA, NA, "Curl", NA, NA), L2 = c(NA, NA, "Curl", NA, NA, NA), R2 = c(NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, NA_character_ ), R1 = c("Curl", NA, NA, NA, NA, NA), B = c(NA, NA, NA, NA, NA, "NULL")), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"))
票数 2
EN

Stack Overflow用户

发布于 2021-07-21 18:41:19

您可以通过pivot_longer获取一列中的所有值,然后删除NAs。

然后按game.event分组,并创建非NA值的空格分隔字符串,并连接到原始的df

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(tidyverse)

df %>% 
  left_join(by = "game.event",
    df %>% 
    pivot_longer(-game.event) %>% 
    filter(!is.na(value)) %>% 
    group_by(game.event) %>% 
    summarise(values = paste(value, collapse = " "))
)

# A tibble: 12 x 7
   game.event L1                   L2    R2    R1     B     values                                   
   <chr>      <chr>                <chr> <chr> <chr>  <chr> <chr>                                    
 1 279310     NULL                 NA    NA    NA     NA    NULL NULL NULL NULL NULL                 
 2 279310     NA                   NULL  NA    NA     NA    NULL NULL NULL NULL NULL                 
 3 279310     NA                   NA    NA    NULL   NA    NULL NULL NULL NULL NULL                 
 4 279310     NA                   NA    NULL  NA     NA    NULL NULL NULL NULL NULL                 
 5 279310     NA                   NA    NA    NA     NULL  NULL NULL NULL NULL NULL                 
 6 279310     NA                   NA    NA    NA     NA    NULL NULL NULL NULL NULL                 
 7 279315     Fade - Back Shoulder NA    NA    NA     NA    Fade - Back Shoulder Curl Go/Fly Out Curl
 8 279315     NA                   Curl  NA    NA     NA    Fade - Back Shoulder Curl Go/Fly Out Curl
 9 279315     NA                   NA    NA    Go/Fly NA    Fade - Back Shoulder Curl Go/Fly Out Curl
10 279315     NA                   NA    Out   NA     NA    Fade - Back Shoulder Curl Go/Fly Out Curl
11 279315     NA                   NA    NA    NA     NA    Fade - Back Shoulder Curl Go/Fly Out Curl
12 279315     NA                   NA    NA    NA     Curl  Fade - Back Shoulder Curl Go/Fly Out Curl

注意:如果您不立即需要新列中的值作为空格分隔的列表,则可以将它们存储为列表,而不是粘贴的空格分隔的字符串。为此,请使用summarise(values = list(value))

票数 1
EN

Stack Overflow用户

发布于 2021-07-21 19:15:47

您可以unlist cur_data()值,删除NA并粘贴每个game.event的输出。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(dplyr)

df %>%
  group_by(game.event) %>%
  summarise(new = paste(na.omit(unlist(cur_data())), collapse = ' '))

#  game.event new                                      
#  <chr>      <chr>                                    
#1 279310     NULL NULL NULL NULL NULL                 
#2 279315     Fade - Back Shoulder Curl Out Go/Fly Curl

如果您想保持其余的行和列保持原样,并且只想添加一个新列,请使用mutate而不是summarise

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68478402

复制
相关文章
在数据框架中创建计算列
在Excel中,我们可以通过先在单元格中编写公式,然后向下拖动列来创建计算列。在PowerQuery中,还可以添加“自定义列”并输入公式。在Python中,我们创建计算列的方式与PQ中非常相似,创建一列,计算将应用于这整个列,而不是像Excel中的“下拉”方法那样逐行进行。要创建计算列,步骤一般是:先创建列,然后为其指定计算。
fanjy
2022/04/13
3.9K0
在数据框架中创建计算列
分组后合并分组列中的字符串如何操作?
后来他自己参考月神的文章,拯救pandas计划(17)——对各分类的含重复记录的字符串列的去重拼接,也写出来了,如图所示。
前端皮皮
2022/08/17
3.3K0
分组后合并分组列中的字符串如何操作?
不同列不同行的数据如何进行转置?
案例模拟文件下载 http://gofile.me/4KHV7/SUo5ywXxC
逍遥之
2020/03/24
2.9K0
不同列不同行的数据如何进行转置?
forestploter: 分组创建具有置信区间的多列森林图
与其他绘制森林图的包相比,forestploter将森林图视为表格,元素按行和列对齐。可以调整森林图中显示的内容和方式,并且可以分组多列显示置信区间。森林图的布局由所提供的数据集决定。
生信技能树
2022/04/14
9.1K0
forestploter: 分组创建具有置信区间的多列森林图
从DataFrame中删除列
在操作数据的时候,DataFrame对象中删除一个或多个列是常见的操作,并且实现方法较多,然而这中间有很多细节值得关注。
老齐
2021/03/29
7.1K0
第十课 分组数据创建分组过滤分组分组和排序
** having和where的区别 **: ** where在数据分组前进行过滤,having在数据分组后进行过滤,where过滤的是行,having过滤的是分组 **
desperate633
2018/08/22
1.3K0
第十课 分组数据创建分组过滤分组分组和排序
按照A列进行分组并计算出B列每个分组的平均值,然后对B列内的每个元素减去分组平均值
前几天在Python星耀交流群有个叫【在下不才】的粉丝问了一个Pandas的问题,按照A列进行分组并计算出B列每个分组的平均值,然后对B列内的每个元素减去分组平均值,这里拿出来给大家分享下,一起学习。
前端皮皮
2022/08/17
3K0
按照A列进行分组并计算出B列每个分组的平均值,然后对B列内的每个元素减去分组平均值
Pandas基础:列方向分组变形
但是我发现大部分人在做这个题的时候,代码写的异常复杂。所以我建议你也不要直接看我的代码,而是先思考一下,你会怎么解决这个问题。
朱小五
2021/02/22
1.4K0
Pandas基础:列方向分组变形
Hive创建外部表CSV数据中列含有逗号问题处理
在不能修改示例数据的结构情况下,这里需要使用Hive提供的Serde,在Hive1.1版本中提供了多种Serde,此处的数据通过属于CSV格式,所以这里使用默认的org.apache.hadoop.hive.serde2.OpenCSVSerde类进行处理。经过修改后的建表语句如下:
Fayson
2018/11/16
7.5K0
使用Pandas完成data列数据处理,按照数据列中元素出现的先后顺序进行分组排列
前几天在Python钻石交流群【瑜亮老师】给大家出了一道Pandas数据处理题目,使用Pandas完成下面的数据操作:把data列中的元素,按照它们出现的先后顺序进行分组排列,结果如new列中展示。df打印结果展示如下:。
Python进阶者
2022/06/05
2.3K0
使用Pandas完成data列数据处理,按照数据列中元素出现的先后顺序进行分组排列
对 list 中的相同数据进行分组
同一组数据分组 需求:一个 list 里可能会有出现一个用户多条数据的情况。要把多条用户数据合并成一条。 思路:将相同的数据中可以进行确认是相同的数据,拿来做分组的 key,这样保证不会重。 实际中使用,以用户数据为例,可能用户名和身份证号是不会变的,用这两个条件拼接起来。
潇洒
2019/06/28
5.7K0
分组时需要求和的数据有几十列,有快捷方法吗?
在我以前的文章中,涉及分组依据操作的内容,需要聚合(求和等)的列通常不会太多,因此,手工操作一下也很快,但有朋友还是碰到了需要对几十列进行求和的问题,这个时候,如果还是手工一项项地设置的话,的确会有点儿烦。
大海Power
2021/08/30
9620
读取文档数据的各列的每行中
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117322.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/06
2K0
掌握pandas中的时序数据分组运算
我们在使用pandas分析处理时间序列数据时,经常需要对原始时间粒度下的数据,按照不同的时间粒度进行分组聚合运算,譬如基于每个交易日的股票收盘价,计算每个月的最低和最高收盘价。
朱卫军 AI Python
2022/04/03
3.4K0
掌握pandas中的时序数据分组运算
LeetCode 947. 移除最多的同行或同列石头(并查集)
1. 题目 我们将石头放置在二维平面中的一些整数坐标点上。每个坐标点上最多只能有一块石头。 每次 move 操作都会移除一块所在行或者列上有其他石头存在的石头。 请你设计一个算法,计算最多能执行多少次 move 操作? 示例 1: 输入:stones = [[0,0],[0,1],[1,0],[1,2],[2,1],[2,2]] 输出:5 示例 2: 输入:stones = [[0,0],[0,2],[1,1],[2,0],[2,2]] 输出:3 示例 3: 输入:stones = [[0,0]] 输出
Michael阿明
2020/07/13
5590
盘点一个Pandas多列分组问题
大家好,我是皮皮。 一、前言 前几天在Python白银交流群【在途中要勤奋的熏肉肉🤪】问了一道Pandas处理的问题,如下图所示。 原始数据如下图所示: 下面是她自己写的代码: # df['name'] = df['name'].str.lower() test['pid'] = test['pid'].astype(int) test['arr0'] = test['arr0'].astype(str) test['arr1'] = test['arr1'].astype(str) test[
前端皮皮
2022/08/17
1.2K0
盘点一个Pandas多列分组问题
王巨宏:十年不怠,携手同行 | CCF创建60周年文集
本文转自“中国计算机学会” 时光如梭,腾讯和CCF的合作已经开展了10余年。我也作为一名CCF的志愿者、参与者和共建者,在这个充满理想、热情和责任感的集体里同行了10年。 “ CCF编者语: 2022将迎来CCF创建60周年,我们会开展一系列活动庆祝60周年。在未来的这一段时间内会在CCF会员故事中陆续发布CCF60周年文集中的一些文章。这篇是CCF前副理事长、腾讯公司副总裁王巨宏为CCF60周年文集撰写的文章。 2015年,我有幸被推荐参与CCF第十一次会员代表大会副理事长竞选,当时的情景依然历历在目
腾讯高校合作
2022/03/24
5270
为什么同行网站不优化,而排名比我们高?
为什么同行网站没外链和优化,而我每日更新,发外链,排名上不去?对于这个问题,我在现实当中也是遇到过的,看到对方网站也不更新内容,外链也不发,但就是要高我一筹,甚是气人,为此我做了详细的研究发现为什么我们网站落后与人的原因不外呼以下几点,因此以此案例作为讲解以上问题。
蝙蝠侠IT
2021/06/30
3360
为什么同行网站不优化,而排名比我们高?
Linq 分组(group by)求和(sum)并且按照分隔符(join)分割列数据
转载:http://www.cnblogs.com/zq281660880/archive/2012/09/26/2704836.html
跟着阿笨一起玩NET
2018/09/20
1.3K0
Linq 分组(group by)求和(sum)并且按照分隔符(join)分割列数据
Python中的groupby分组
这个是groupby的最常见操作,根据某一列的内容分为不同的维度进行拆解,将同一维度的再进行聚合
全栈程序员站长
2022/09/01
2K0
Python中的groupby分组

相似问题

从群按列的分组中创建数据

11

oracle相同行多列分组依据

41

从分组数据帧中的行值创建新列?

36

如何从带间隔的两列分组的数据中创建分组桶图

11

MYSQL:如何从单个列中获取不同行的数据?

24
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文