我试图弄清楚如何改变 tidyrpivot_wider()函数在生成的宽数据集中创建新变量名称的方式。具体来说,我希望将“names_from”变量添加到新变量的前缀而不是后缀。
我的数据集看起来像:
list(ID = c("A950", "A950", "A950", "A970", "A970", "A970", "A996", "A996", "A996"),
Phase = c("P1", "P2", "P3", "P1", "P2", "P3", "P1", "P2", "P3"),
A = c(23.5, 25.2, 21.9, 21.9, 21.1, 20.3, 19.5, 18.7, 17.9),
B = c(21.9, 21.1, 20.3, 19.5, 18.7, 17.9, 17.1, 16.3, 15.5),
C = c(25.2, 21.9, 20.3, 17.6, 15.1, 12.7, 10.3, 7.8, 5.4),
D = c("M", "M", "M", "F", "F", "F", "N", "N", "N"))
Run Code Online (Sandbox Code Playgroud)
当我使用pivot_wider()Phase 作为“关键”来传播数据集时,我的结果如下所示:
ex_wide <- ex_long %>%
pivot_wider(names_from …Run Code Online (Sandbox Code Playgroud) 为了简化数据整理,我编写了一个由处理数据的几个“动词函数”组成的包装函数。每个人对数据执行一项任务。但是,并非所有任务都适用于通过此过程的所有数据集,有时,对于某些数据,我可能想关闭一些“动词功能”,并跳过它们。
我试图了解是否有一种传统/规范的方式来在 R 的包装器函数中构建这样的工作流。重要的是,一种高效的方式,无论是性能方面还是简洁的代码。
作为数据整理的一部分,我想执行几个步骤:
janitor::clean_names())TRUE和FALSE被替换为1和0(使用gsub())。tolower())。id列旋转更宽(使用tidyr::pivot_wider)NA值的行(使用dplyr::drop_na())玩具数据
library(stringi)
library(tidyr)
set.seed(2021)
# simulate data
df <-
data.frame(id = 1:20,
isMale = rep(c("true", "false"), times = 10),
WEIGHT = sample(50:100, 20),
hash_Numb = stri_rand_strings(20, 5)) %>%
cbind(., score = sample(200:800, size = 20))
# sprinkle NAs randomly
df[c("isMale", "WEIGHT", "hash_Numb", "score")] …Run Code Online (Sandbox Code Playgroud) 我将使用内置chickwts数据作为示例。
这是数据,有 5 种提要类型。
> head(chickwts)
weight feed
1 179 horsebean
2 160 horsebean
3 136 horsebean
4 227 horsebean
5 217 horsebean
6 168 horsebean
> table(chickwts$feed)
casein horsebean linseed meatmeal soybean sunflower
12 10 12 11 14 12
Run Code Online (Sandbox Code Playgroud)
我想要的是每种饲料类型按重量计算的前几行。但是,对于每种 Feed 类型我都需要不同的编号吗?例如,
top_n_feed <-
c(
"casein" = 3,
"horsebean" = 5,
"linseed" = 3,
"meatmeal" = 6,
"soybean" = 3,
"sunflower" = 2
)
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点dplyr?
要按n重量获得每种提要类型的顶行,我可以使用如下代码,但我不确定如何将其扩展到每种提要类型的不同数字。
chickwts %>%
group_by(feed) %>%
slice_max(order_by = weight, …Run Code Online (Sandbox Code Playgroud) 我想根据数据集中预先存在的行的值创建新行。有两个问题:首先,某些单元格值需要保持不变,而其他单元格值必须增加 +1。其次,我需要以相同的次数循环遍历每一行。
我觉得用数据会更容易理解
我从这里开始:
mydata <- data.frame(id=c(10012000,10012002,10022000,10022002),
col1=c(100,201,44,11),
col2=c("A","C","B","A"))
Run Code Online (Sandbox Code Playgroud)
这就是我想要的:
mydata2 <- data.frame(id=c(10012000,10012001,10012002,10012003,10022000,10022001,10022002,10022003),
col1=c(100,100,201,201,44,44,11,11),
col2=c("A","A","C","C","B","B","A","A"))
Run Code Online (Sandbox Code Playgroud)
请注意我如何在每个新行的 id 列单元格中添加 +1,但 col1 和 col2 保持不变。
谢谢
我正在尝试使用R 中的pivot_longer()转换表。但分隔不是由任何常见符号,例如“_”或“。”。而是通过列名的结尾方式(“B”或“T”)。我尝试使用正则表达式,但没有太大成功。
下面是示例原始表以及我希望最终转换后的表如何。非常感谢您的帮助。
原表:
tibble(Datetime = seq(as.Date("2000/1/1"), by = "month", length.out = 10),
`ABC1-P1B` = seq(1,10),
`ABC1-P1T` = seq(101,110),
`ABC1-P2B` = seq(11,20),
`ABC1-P2T` = seq(201,210))
# A tibble: 10 x 5
Datetime `ABC1-P1B` `ABC1-P1T` `ABC1-P2B` `ABC1-P2T`
<date> <int> <int> <int> <int>
1 2000-01-01 1 101 11 201
2 2000-02-01 2 102 12 202
3 2000-03-01 3 103 13 203
4 2000-04-01 4 104 14 204
5 2000-05-01 5 105 15 205
6 2000-06-01 6 106 16 206
7 …Run Code Online (Sandbox Code Playgroud) 我的数据集有input几个缺失值。我必须output使用以下逻辑创建数据集:
b如果、c、 或 中的任何列中存在缺失d,则\n检查相应的a列并使用从该行到特定列的\n相应值填充缺失的部分。我尝试使用_join来自的函数来做到这一点dplyr,但没有成功。
我可以手动执行此操作,但此选项不可行,因为我有一个包含多个此类实例的大数据集。
\nlibrary(dplyr)\n\ninput <- tibble( a = rep(c("A", "B", "C", "D"),2 ),\n b = c(1:3, NA, rep(NA,4)),\n c = c(21:28),\n d = c(rep(NA,4), 54, NA, 34,11)) %>% \n arrange(a)\nRun Code Online (Sandbox Code Playgroud)\n# A tibble: 8 \xc3\x97 4\n# a b c d\n# <chr> <int> <int> <dbl>\n#1 A 1 21 NA\n#2 A NA 25 …Run Code Online (Sandbox Code Playgroud) 我有一个如下所示的数据框
d1<-c('a','b','c','d','e','f','g','h','i','j','k','l')
d2<-c(1,5,1,2,13,2,32,2,1,2,4,5)
df1<-data.frame(d1,d2)
Run Code Online (Sandbox Code Playgroud)
看起来就像这张图中的数据表
我目前有一个数据集,其中的所有信息都在一行(或一列,如果我转置)中。数据中的第一项实际上是列名:
Country | Population | Country Column One | Country Column 2 | USA | 400 million | USA Column 1 | USA Column 2 | Canada | 38 Million | Canada Column 1 | Canada Column 2 | etc..
Run Code Online (Sandbox Code Playgroud)
我注意到,一旦到达新的国家/地区,我就可以“换行”并让所有内容从新行开始。我该怎么办呢?有更有效的方法吗?
我在改变 . 中的变量时遇到了一个奇怪的问题dplyr。如果我运行这段代码:
diamonds %>%
select(cut) %>%
table()
Run Code Online (Sandbox Code Playgroud)
我在 R 中看到了数据集中因素的列表diamonds:
cut
Fair Good Very Good Premium Ideal
1610 4906 12082 13791 21551
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试更改其中一个名称并保留其余名称:
diamonds %>%
mutate(cut.fix = ifelse(cut == "Fair",
"Not Fair at All",
cut)) %>%
select(cut.fix) %>%
table()
Run Code Online (Sandbox Code Playgroud)
它只会更改“固定”值,其他所有内容都会变成数值:
cut.fix
2 3 4 5
4906 12082 13791 21551
Not Fair at All
1610
Run Code Online (Sandbox Code Playgroud)
这是什么原因?我该如何解决?
我有一个数据集如下。当我使用 table1() 从中创建 table1 时,会给出一行用于缺失值。我想知道是否可以从变量之一(例如 var3)中排除“缺失行”。
我想这样做的原因是因为,在我的实际数据集中,我的住院时间是可变的。并非数据集中的所有个人都在医院,因此这些患者没有丢失数据,他们只是没有此变量的数据,因为他们不在医院提供数据。
任何帮助将不胜感激,谢谢。
data <- data.frame(
var1 = c(1, 2, NA, 4, 5),
var2 = c("A", "B", NA, "D", "E"),
var3 = c(10, NA, 30, 40, 50)
)
table1(~var1 + var2 + var3, data=data)
Run Code Online (Sandbox Code Playgroud)