tibble1111 <- tibble(name = c("allen", "allen","allen","sb"), type = c("math", "english", NA,"cbhegfi"), score = c(99,89,90,55)) tibble2222 <- tibble1111 %>% spread(key=type, value=score) 如何把tibble2222变成tibble1111(用gather函数))
时间: 2023-07-19 12:36:26 浏览: 81
您可以使用`gather()`函数将`tibble2222`重新变为`tibble1111`的形式,代码如下:
```
tibble2222 %>%
gather(key = "type", value = "score", -name, na.rm = TRUE) %>%
arrange(name, type) %>%
group_by(name, type) %>%
fill(score) %>%
ungroup()
```
解释一下上面的代码:
- `gather()`函数可以将`tibble2222`从宽格式变为长格式,其中`key`参数指定新列名,`value`参数指定新列的值,`-name`指定不需要被转换的列,`na.rm = TRUE`表示移除缺失值。
- `arrange()`函数可以按照`name`和`type`排序。
- `group_by()`函数可以按照`name`和`type`进行分组。
- `fill()`函数可以填充缺失值,这里会使用上一个非缺失值进行填充。
- `ungroup()`函数可以将分组取消。
执行上述代码后,数据框将会变回去,其中`type`列的值为原来的列名,`score`列的值为原来列的值。
相关问题
已知 df<-tibble(x = c(5,2,NA))。尝试将 NA 移到 tibble 最上的位置。(提示:使用 is.na(),系统默认逻辑值 FALSE 为 0)
你可以使用 `dplyr` 包中的 `arrange()` 函数,将 `is.na(x)` 排在最前面,然后再将其余的数字按原顺序排列。
代码如下:
```r
library(dplyr)
df <- tibble(x = c(5,2,NA))
df %>%
arrange(desc(is.na(x)), x)
```
输出结果为:
```
# A tibble: 3 x 1
x
<dbl>
1 NA
2 2
3 5
```
可以看到,NA 已经被排在了最前面。
R语言代码编写 提取大写字母后的数字 df<-tibble(x=c("12W34", "AB2C46", "B217C","akTs6df","21WD4"))
您好!根据您的要求,可以使用正则表达式提取大写字母后的数字,代码如下:
```R
library(tibble)
df <- tibble(x = c("12W34", "AB2C46", "B217C", "akTs6df", "21WD4"))
df$number <- gsub("^.*[A-Z](\\d+).*", "\\1", df$x)
```
解释一下代码:
1. 首先,我们使用了 `gsub` 函数,它可以帮助我们在一个字符串中查找和替换文本。
2. 接着,我们使用了正则表达式 `^.*[A-Z](\\d+).*`,这个正则表达式可以匹配一个字符串中大写字母后的数字。
3. 然后,我们使用 `\\1` 表示替换成正则表达式中第一个括号匹配的内容,也就是提取的数字。
4. 最后,我们将提取到的数字存储在一个新的列 `number` 中。
希望这个代码可以帮助到您!
阅读全文