小编x1c*_*bon的帖子

使用R将单个柱分成多个观察

我正在研究HCUP数据,它在一个列中有一系列值,需要拆分成多列.以下是HCUP数据框供参考:

code            label
61000-61003     excision of CNS
0169T-0169T     ventricular shunt
Run Code Online (Sandbox Code Playgroud)

期望的输出应该是:

code            label
61000           excision of CNS
61001           excision of CNS
61002           excision of CNS
61003           excision of CNS
0169T           ventricular shunt
Run Code Online (Sandbox Code Playgroud)

我解决这个问题的方法是使用包splitstackshape并使用此代码

library(data.table)
library(splitstackshape)

cSplit(hcup, "code", "-")[, list(code = code_1:code_2, by = label)]
Run Code Online (Sandbox Code Playgroud)

这种方法会导致内存问题.有没有更好的方法来解决这个问题?

一些评论:

  • 除"T"之外,数据有许多字母.
  • 这封信可以在前面或最后但不在两个数字之间.
  • 在一个范围内,"T"到"U"的字母没有变化

r medical data.table data-cleaning splitstackshape

8
推荐指数
2
解决办法
1055
查看次数

在dplyr中的ifelse花费更长的时间来执行

我正在处理医疗索赔数据,数据文件如下所示

claim_id  status
abc123    P
abc123    R
xyz374    P
xyz386    R
Run Code Online (Sandbox Code Playgroud)

我想创建一个新列作为标志,它基本上将由claim_id分组,并且如果相同的claim_id的状态包括"P"和"R".标志栏应包含"是"

claim_id  status  flag
abc123    P       Yes
abc123    R       Yes
xyz374    P       No
xyz386    R       No
Run Code Online (Sandbox Code Playgroud)

我对这个解决方案的方法是使用dplyr: -

data <-data1 %>% 
   group_by(claim_id)%>% 
   mutate(flag = ifelse(any(status == "P" | status == "R"), 
                            "Yes", 
                             as.character(status)))
Run Code Online (Sandbox Code Playgroud)

此方法需要较长时间,并且还会在标志列中将所有行标记为"是".

r medical

2
推荐指数
1
解决办法
93
查看次数

R中字符变量的最大字符串出现次数

我有一个数据框,有两列(医院名称,类型).变量是字符变量.数据如下所示: -

hospital_name  type
ABC            rural
ABC            rural
ABC            urban
XYZ            urban
XYZ            urban
EFG            rural
Run Code Online (Sandbox Code Playgroud)

我正在编写一个代码,该代码将按医院名称分组,并计算该组中每种类型的数量.接下来,创建一个名为type2的新列,该列将具有类型列中出现次数最多的值.期望的输出应该是: -

hospital_name  type  type2
ABC            rural rural
XYZ            urban urban
EFG            rural rural        
Run Code Online (Sandbox Code Playgroud)

我使用dplyr解决了这个问题,但是我收到了错误.这是我的解决方案: -

library("dplyr")
df<-df%>%group_by(hospital_name)%>%mutate(type2=names(which.max(table(type))))
Run Code Online (Sandbox Code Playgroud)

错误是: -

Error: incompatible types, expecting a character vector
Run Code Online (Sandbox Code Playgroud)

r data-cleaning

0
推荐指数
1
解决办法
445
查看次数

计算使用R按两个不同列分组的列中出现的次数

以下是原件 data.frame

ID   Date       Type
123  2011-Jan   A
123  2011-Jan   A
123  2011-Jan   A
123  2011-Jan   B
123  2011-Jan   B
123  2011-Jan   C
123  2011-Mar   X
123  2011-Mar   X
345  2011-Jan   A
345  2011-Jan   A
345  2011-Jan   X
345  2011-Jan   X
456  2011-Mar   Y
789  2011-Mar   z
Run Code Online (Sandbox Code Playgroud)

所需的输出有5个新列,它们将分别具有列类型(Type_1)的第1个最大计数,列类型的第2个最大计数(Type_2).以下是所需的输出

ID   Date       Type_1  Type_2  Type_3  Type_4  Type_5
123  2011-Jan   A       B       C       NA      NA
123  2011-Mar   X       NA      NA      NA      NA
345  2011-Jan   A       NA      NA      NA      NA …
Run Code Online (Sandbox Code Playgroud)

r count

-4
推荐指数
1
解决办法
55
查看次数

标签 统计

r ×4

data-cleaning ×2

medical ×2

count ×1

data.table ×1

splitstackshape ×1