首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >R中的特殊合并

R中的特殊合并
EN

Stack Overflow用户
提问于 2017-07-21 18:08:57
回答 2查看 41关注 0票数 1

我有一个有很多行和列的数据框架,但是对于这个特定的练习,我只需要两个列来表示这个数据框架。例如,我有这样的想法:

代码语言:javascript
运行
AI代码解释
复制
    ID Amount
  1  7    100
  2  6    495
  3 85    550
  4 64    600
  5  3    150

我还有另一个数据框架,它也有很多行和列,但是我只需要三列:

代码语言:javascript
运行
AI代码解释
复制
  ID Perc Type
1  7 0.05    A
2  6 0.50    A
3 85 0.75    A
4  7 0.90    B
5 64 0.30    C
6  3 0.50    A
7 64 0.40    A

我需要做的是根据ID合并这两个数据帧,但是有一个额外的列,它告诉我每个数据帧的百分比,如果找不到,则将0放在零,如下所示:

代码语言:javascript
运行
AI代码解释
复制
  ID Amount    A   B   C
1  7    100 0.05 0.9 0.0
2  6    495 0.50 0.0 0.0
3 85    550 0.75 0.0 0.0
4 64    600 0.40 0.0 0.3
5  3    150 0.50 0.0 0.0

也许这并不是真正的合并,但这才是我脑海中唯一想到的。

有什么想法吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-21 18:43:45

您必须将第二个数据框架从long转换为wide (请参阅package reshape2以便于使用),然后将其结果合并到第一个。

做以下工作:

代码语言:javascript
运行
AI代码解释
复制
library(reshape2)

# Transform from long to wide
df2_wide = dcast(df2, ID ~ Type, value.var = "Perc")

# Set NAs to 0
df2_wide[is.na(df2_wide)] = 0

# Merge both data frames
df3 = merge(df1,df2_wide)

其中,df2是您的第二个数据帧,df1是第一个数据帧。

结果:

代码语言:javascript
运行
AI代码解释
复制
  ID Amount    A   B   C
1  3    150 0.50 0.0 0.0
2  6    495 0.50 0.0 0.0
3  7    100 0.05 0.9 0.0
4 64    600 0.40 0.0 0.3
5 85    550 0.75 0.0 0.0
票数 2
EN

Stack Overflow用户

发布于 2017-07-21 18:46:36

下面是使用tidyrdplyr包的解决方案

代码语言:javascript
运行
AI代码解释
复制
df1<-structure(list(ID = c(7L, 6L, 85L, 64L, 3L), Amount = c(100L,  495L, 550L, 600L, 150L)), 
          .Names = c("ID", "Amount"), class = "data.frame", row.names = c("1", "2", "3", "4", "5"))

df2<-structure(list(ID = c(7L, 6L, 85L, 7L, 64L, 3L, 64L),  Perc = c(0.05,  0.5, 0.75, 0.9, 0.3, 0.5, 0.4), 
             Type = structure(c(1L, 1L, 1L,  2L, 3L, 1L, 1L), 
             .Label = c("A", "B", "C"), class = "factor")), 
             .Names = c("ID", "Perc", "Type"), class = "data.frame", row.names = c("1", "2",  "3", "4", "5", "6", "7"))

library(tidyr)
#go from long to wide format
df2w<-spread(df2, Type, Perc, fill=0)

library(dplyr)
#merge the 2 data frames together
final answer<-left_join(df2w, df1, by="ID")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45249947

复制
相关文章
使用R中merge()函数合并数据[通俗易懂]
在R中可以使用merge()函数去合并数据框,其强大之处在于在两个不同的数据框中标识共同的列或行。
全栈程序员站长
2022/07/01
5.5K0
使用R中merge()函数合并数据[通俗易懂]
R中字段抽取、字段合并、字段匹配
1、字段抽取 字段抽取,是根据已知列数据的开始和结束位置,抽取出新的列 字段截取函数:substr(x,start,stop) tel <- '18922254812'; #运营商 band <- substr(tel, 1, 3) #地区 area <- substr(tel, 4, 7) #号码段 num <- substr(tel, 8, 11) tels <- read.csv('1.csv'); #运营商 bands <- substr(tels[,1], 1, 3) #地区 areas <-
Erin
2018/01/09
5.4K0
R语言进阶之图形的合并
为了节省版面,我们通常会将多张图片合成一张图,在R语言中我们可以使用par( )或者layout( )函数来轻松实现这个功能。
生信与临床
2020/08/05
4.1K0
R语言之数据框的合并
要纵向合并两个数据框,可以使用 rbind( )函数。被合并的两个数据框必须拥有相同的变量,这种合并通常用于向数据框中添加观测。例如:
timerring
2023/10/13
9460
R语言之数据框的合并
R语言数据集合并、数据增减、不等长合并
1、merge(a,b),纯粹地把两个数据集合在一起,没有沟通a、b数据集的by,这样出现的数据很多,相当于a*b条数据;
悟乙己
2019/05/28
13.6K0
R如何提取,合并pdf文件
多年以前,小编还在读博士的时候,实验室评选重点实验室。为了迎接教育部的检查,需要把实验室近10年发表的文章的首页都打印出来,因为首页上有作者和单位。你要知道小编的实验室是做生物信息学的,加上实验室人丁兴旺,因此相当的高产。我被分到了其中一年发表的文章,有三四十篇。
生信交流平台
2022/09/21
1.3K0
R如何提取,合并pdf文件
css中换行的特殊用法
两个属性都同样是让文字换行,但存在着细微的区别,大部分时候刚接触到这两个属性时会无法区别两个的区别
李才哥
2019/07/10
2.3K0
JS中特殊的对象-数组
前言 之前学习的数据类型,只能存储一个值(比如:Number/String)。我想在一个变量中存储多个值,应该如何存储? 所谓数组,就是将多个元素(通常是同一类型)按一定顺序排列放到一个集合中,那么这个集合我们就称之为数组。 1.1 数组的创建 // 字面量方式创建数组 var arr1 = []; //空数组 // 创建一个包含3个数值的数组,多个数组项以逗号隔开 var arr2 = [1, 3, 4]; // 创建一个包含2个字符串的数组 var arr3 = ['a', 'c']; cons
汤清丽
2019/12/01
9.3K0
Python中的特殊变量名
1.以单一下划线开头的变量名(_X)不会被from module import *语句导入。
py3study
2020/01/08
1.5K0
iOS中url的特殊字符转换
一般来说我们调用webVIew的时候,只要给webVIew传一个url,在网页里面就可以显示网页信息。但是当我们传的url比较麻烦或者带文字符,带参数的时候我们需要对特殊字符进行转义。我们还可以用遍历,正则等来把特殊字符给替换掉!!
好派笔记
2021/10/29
3.2K0
TS/JS中的特殊符号用法(?/!)、?.、??、??
之前在学习C#的时候(7年的事情了),依稀记得有  ??、 ?、 ?: 、?.、?[ ] 一堆符号,记得脑壳疼,没有想到现在js ts 也带上了 C#中 ??、 ?、 ?.、?[ ] 空合并运算符(?
周陆军博客
2023/05/07
2.3K0
JavaScript 中的特殊数值有哪些?
JavaScript 中有几个特殊的数值常量,它们具有特殊的含义和行为。以下是 JavaScript 中的一些特殊数值:
王小婷
2023/10/23
3150
正则中需要转义的特殊字符
正则表达式中有一些特殊的字符需要转义,收集整理如下: 特殊字符         说明 $ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n' 或 ‘\r'。要匹配 $ 字符本身,请使用 \$。 ( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。 * 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。 + 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。 . 匹配
流柯
2018/08/31
4.1K0
HTML-HTML中的特殊字符
HTML中常用的特殊字符: 本文中的特殊字符持续收集中... HTML源代码 显示结果 描述 < < 小于号或显示标记 > > 大于号或显示标记 & & 可用于显示其他特殊字符 " " 引号 ® ® 已注册 © © 版权 ™ &trade 商标 &ensp 半个空格位 &emsp 一个空格位 不断行的空格位 ´ ´ ´ ´ > > µ µ ® ® & & ° ° ¡ ¡ » » ¦ ¦ ÷ ÷ ¿ ¿ ¬ ¬ § § • • ½ ½ « « ¶ ¶ &nml; &nml;
白衣少年
2023/01/08
6.3K0
FlinkSQL | 流处理中的特殊概念
上一篇文章,为大家介绍了关于 FlinkSQL 的背景,常见使用以及一些小技巧。学完之后,对于FlinkSQL只能算是简单入了个门。不过不用担心,本篇文章,博主将为大家带来关于 FlinkSQL中流处理的特殊概念,喜欢的话,记得看完点个赞|ू・ω・` )
大数据梦想家
2021/10/22
2K0
vue中特殊的prop和事件
当 <base-checkbox> 触发一个 change 事件并附带一个新的值的时候,这个 lovingVue 的 property 将会被更新
阿超
2022/08/21
6210
TS中的命名空间合并
我们从中了解了声明合并其实指的就是编译器会针对同名的声明合并为一个声明,合并的结果是合并后的声明会同时拥有原先两个或多个声明的特性
玖柒的小窝
2021/11/28
1.6K0
TS中的命名空间合并
python 中的特殊方法,纠正自己笨笨
  注: 在Python 3.x中没有新式类和老式类之分,它们都继承自'object' 类。因此可以不用显示地指定其基类。'object'基类中拥有的方法和属性可通用于所有的新式类。
py3study
2020/01/21
5620
Linux中&&、&、|、||等特殊符号的作用
2>&1 表示把标准错误的输出重定向到标准输出1,&指示不要把1当做普通文件,而是fd=1即标准输出处理。
用户10125653
2022/11/10
2.1K0
R语言中的特殊值及缺失值NA的处理方法
R语言中存在一些null-able values,当我们进行数据分析时,理解这些值是非常重要的。
小汪Waud
2023/02/16
3.4K0

相似问题

R将列表合并为特殊格式的表格

33

在dataframe R中添加特殊字符并合并值

23

R中的特殊排列

10

R中的特殊形状

311

R中的特殊字符

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档