r - 将列分成两列 r
问题描述
直截了当,我需要将一列沿行拆分为两列。这是一些虚拟数据:
structure(list(id = structure(1:8, .Label = c("A1", "A2", "A3",
"A4", "B1", "B2", "B3", "B4"), class = "factor"), value = c(0.360828393837437,
0.671899559209123, 0.905935228336602, 0.934275768464431, 0.450348142534494,
0.99131133640185, 0.696797786746174, 0.104902224382386)), class = "data.frame", row.names = c(NA,
-8L))
虚拟数据
id value
1 A1 0.3608284
2 A2 0.6718996
3 A3 0.9059352
4 A4 0.9342758
5 B1 0.4503481
6 B2 0.9913113
7 B3 0.6967978
8 B4 0.1049022
现在我需要做的是从 B1 拆分到 B4。我可以使用slice()
它们并稍后重新组合它们来做到这一点,但我希望学习如何在单行中做到这一点。提前感谢并道歉,如果这样的问题已经存在,找不到它。
解决方案
在base R
你可以使用split
和Reduce
out <- Reduce(cbind, split(dummy_data, substr(dummy_data$id, 1, 1)))
names(out) <- make.names(names(out), unique = TRUE)
out
# id value id.1 value.1
#1 A1 0.3608284 B1 0.4503481
#2 A2 0.6718996 B2 0.9913113
#3 A3 0.9059352 B3 0.6967978
#4 A4 0.9342758 B4 0.1049022
想法是按 column 的第一个字母拆分数据id
,这将返回一个列表。然后,我们使用 将列表组合回数据框cbind
。
尽管更好的选择可能是do.call
,Reduce
因为这会给出唯一的名称并调用makes.names
过时的。
do.call(cbind, split(dummy_data, substr(dummy_data$id, 1, 1)))
# A.id A.value B.id B.value
#1 A1 0.3608284 B1 0.4503481
#2 A2 0.6718996 B2 0.9913113
#3 A3 0.9059352 B3 0.6967978
#4 A4 0.9342758 B4 0.1049022
推荐阅读
- scala - 无法访问 DiffFunction 内的矩阵行
- flutter - ParentDataWidget 的错误使用
- java - Android 将图像从 Drawable 上传到服务器
- makefile - clang-3.8:在 WSL(Linux 的 Windows 子系统)中找不到命令
- swift - 如何更新 tableView 上的数据并在 2 个视图控制器 Swift 中同步计时器
- java - Spring boot rest模板通过id获取用户给出RestClientException错误
- html - 用图像和动画渐变背景掩盖 div
- json - 如何将 api 中的数据加载到 searchDelegate 函数中?
- javascript - 如何让不和谐机器人在一条消息中打印关联数组的每个元素?
- java - 如何使用 Hibernate Envers 从映射表中获取审计条目