![24cacccee63cd08cb987f334bb4e25a9.png](https://i-blog.csdnimg.cn/blog_migrate/2d5df1857220fbffa37f09cf93a0a520.jpeg)
这是该系列的第四篇,第一、二、三篇见:
张敬信:玩转数据处理120题之P1-P20(R语言tidyverse版本)zhuanlan.zhihu.com![18c23899a10d248071eca41d2e8e0971.png](https://i-blog.csdnimg.cn/blog_migrate/8b3cf48398fe86b7aa871ad667c1b7e7.jpeg)
![18c23899a10d248071eca41d2e8e0971.png](https://i-blog.csdnimg.cn/blog_migrate/8b3cf48398fe86b7aa871ad667c1b7e7.jpeg)
![18c23899a10d248071eca41d2e8e0971.png](https://i-blog.csdnimg.cn/blog_migrate/8b3cf48398fe86b7aa871ad667c1b7e7.jpeg)
本篇是P81-P100. 为了节省版面,输出结果只截取前10个观测。
题目81(加载查看包):加载并查看tidyverse包版本
难度:★
代码及运行结果:
library(tidyverse)
![149cba50cdcde229b144369edd5dab8d.png](https://i-blog.csdnimg.cn/blog_migrate/ef803e295a2132f19fd28ca0a60a2a95.png)
题目82(生成随机数):生成20个0~100的随机数,创建数据框
难度:★
代码及运行结果:
set.seed(123) # 保证结果出现
df1 = tibble(nums = sample.int(100, 20))
df1
![3b4bf44b7583b5939a3c81a456ba2f52.png](https://i-blog.csdnimg.cn/blog_migrate/65a54ae38ee105380830036cb289d4f4.png)
题目83(生成等差数):生成20个0~100固定步长的数,创建数据框
难度:★
代码及运行结果:
df2 = tibble(nums = seq(0, 99, by = 5))
df2
![735e85f48d6c3427d2bb4710975fa772.png](https://i-blog.csdnimg.cn/blog_migrate/8ad20b617983114300d9d8efb7938538.png)
题目84(生成指定分布随机数):生成20个标准正态分布的随机数,创建数据框
难度:★
代码及运行结果:
set.seed(111)
df3 = tibble(nums = rnorm(20, 0, 1))
df3
![77a19405f45fed626b6b855cb9d385ba.png](https://i-blog.csdnimg.cn/blog_migrate/b4eefb86f03863f68c29cfd2ce22d143.png)
题目85(合并数据):将df1, df2, df3按行合并为新数据框
难度:★
代码及运行结果:
bind_rows(df1, df2, df3)
![a05c1276e8970f8227995ef48beb41d0.png](https://i-blog.csdnimg.cn/blog_migrate/35d452589d49b7c8f124c0c524170960.png)
题目86(合并数据):将df1, df2, df3按列合并为新数据框
难度:★
代码及运行结果:
df = bind_cols(df1, df2, df3)
df
![d31454ca3fcad7ae48b3f0f8d1087b29.png](https://i-blog.csdnimg.cn/blog_migrate/1a4bff8ffd0c03298f2511b6f1a17345.png)
题目87(查看数据):查看df所有数据的最小值、25%分位数、中位数、75%分位数、最大值
难度:★★
代码及运行结果:
unlist(df) %>%
summary()
![13886cbbd795b15eb2c4611e20e9f031.png](https://i-blog.csdnimg.cn/blog_migrate/407cd06ebaf59f9b09173e4050236958.png)
题目88(修改列名):修改列名为col1, col2, col3
难度:★
代码及运行结果:
df = df %>%
set_names(str_c("col", 1:3))
df
![52f23f698b3318b6dcca5a139a0f8e99.png](https://i-blog.csdnimg.cn/blog_migrate/5b88ed676b30c0f3972f4d10b130bcd0.png)
注:若只修改个别列名,用rename(newname=oldname).
题目89(数据操作):提取在第1列中而不在第2列中的数
难度:★★
代码及运行结果:
setdiff(df$col1, df$col2)
![18e0b1ea348c8f96a2eb34c6424ab59b.png](https://i-blog.csdnimg.cn/blog_migrate/ca1247a3c44cfa543b15d94bac193a4f.png)
题目90(数据操作):提取在第1列和第2列出现频率最高的三个数字
难度:★★★
代码及运行结果:
tibble(nums = c(df$col1, df$col2)) %>%
group_by(nums) %>%
summarise(frq = n()) %>%
arrange(desc(frq)) %>%
slice(1:3)
![686334ba2c42454a101378eab10bc799.png](https://i-blog.csdnimg.cn/blog_migrate/ef9728d55ca26c1715e1c35658429d50.png)
或者用
c(df$col1, df$col2) %>%
table() %>%
sort(decreasing = TRUE) %>%
.[1:3]
![6b593d599469b6c3be65d484c5f9dbb5.png](https://i-blog.csdnimg.cn/blog_migrate/e2035f4e27a847bea8d0539c70fd6b9b.png)
或者用
rlt = tibble(nums = c(df$col1, df$col2)) %>%
sjmisc::frq(nums, sort.frq = "desc")
rlt[[1]][1:3,]
![e480621b5f60e54bf373384b9632a2c8.png](https://i-blog.csdnimg.cn/blog_migrate/3af23b0b68f8c72932f116ff8b36a48b.png)
题目91(数据操作):提取第1列可以整除5的数的位置
难度:★★
代码及运行结果:
which(df$col1 %% 5 == 0)
![dea6f485db1c27db943a558ccc994e2f.png](https://i-blog.csdnimg.cn/blog_migrate/af23d79fe2bd01cc2c7ad8a7a5a7f77d.png)
题目92(数据计算):计算第1列的1阶差分
难度:★★
代码及运行结果:
df %>%
mutate(diff1 = col1 - lag(col1))
![bccaf76b28966e161cce692af38d0bd3.png](https://i-blog.csdnimg.cn/blog_migrate/36bb5b8f07b35f2b7f4f37a4a8e99985.png)
注:若只是要数值,用diff(df$col1)即可。
题目93(数据操作):将col1, col2, col3三列顺序颠倒
难度:★★
代码及运行结果:
df %>%
select(rev(names(df)))
![0f6a0317ed02cb3fed008d36b0e15dd5.png](https://i-blog.csdnimg.cn/blog_migrate/7a5d9b228c8bcf45e04f9715c0703dbe.png)
注:更灵活的调整列序,dplyr1.0将提供relocate()函数。
题目94(数据操作):提取第一列位置在1,10,15的数
难度:★
代码及运行结果:
df[c(1,10,15),1]
![cb6ce9f1613e6569caaeaf81542455ef.png](https://i-blog.csdnimg.cn/blog_migrate/9f2e6735f879c26a691161187b002af2.png)
或者用
df %>%
select(col1) %>%
slice(1,10,15)
题目95(数据操作):查找第一列的局部最大值位置
难度:★★★★
代码及运行结果:
rlt = df %>%
mutate(diff = sign(col1 - lag(col1)) + sign(col1 - lead(col1)))
which(rlt$diff == 2)
![614aa7354d51623be72523413f031e1e.png](https://i-blog.csdnimg.cn/blog_migrate/b866be9691dbd1705b3eb23c9cf953f1.png)
题目96(数据计算):按行计算df每一行的均值
难度:★★
代码及运行结果:
rowMeans(df) # 或者 apply(df, 1, mean)
![2e18cec424a9ef91a4a164afc7e579f5.png](https://i-blog.csdnimg.cn/blog_migrate/ac264ad5e10482aa9741e250a17e8188.png)
题目97(数据计算):对第二列计算步长为3的移动平均值
难度:★★★
代码及运行结果:
df %>%
mutate(avg_3 = tsibble::slide_dbl(col2, mean, .size = 3, .align = "center"))
![4e88310c26369e2ac4b1bb07bb5cd082.png](https://i-blog.csdnimg.cn/blog_migrate/f38754b068b1d5fae26d5d92fbb4ff90.png)
题目98(数据计算):按第三列值的大小升序排列
难度:★★
代码及运行结果:
df %>%
arrange(col3)
![67a47b2a76f616736db49124a1c20202.png](https://i-blog.csdnimg.cn/blog_migrate/1ddabec865bbfab256ce4dd097da70b6.png)
题目99(数据操作):按第一列大于50的数修改为"高"
难度:★★
代码及运行结果:
df %>%
mutate(col1 = sjmisc::rec(col1, rec = "50:max=高; else=copy"))
# 或者用 df[df$col1 > 50, 1] = "高"
![e63145beb1faf8f1d76508985a723cc2.png](https://i-blog.csdnimg.cn/blog_migrate/331997991e4ca67a38e4d2983e0c742b.png)
注:这里采用更有实用价值的重新编码。
题目100(数据计算):计算第一列与第二列的欧氏距离
难度:★★★
代码及运行结果:
dist(t(df[,1:2]))
![b66ba31e862ac54f53863ffbd0ee46d9.png](https://i-blog.csdnimg.cn/blog_migrate/78fdb8271e0f670d7fca6e3b670e9d38.png)
参考文献
遥遥无期:玩转数据处理120题|Pandas版本zhuanlan.zhihu.com![cb3b4faeeeade5e09977ec75179c1e71.png](https://i-blog.csdnimg.cn/blog_migrate/4dd3c17433be55739e67308735da2979.jpeg)