r - 根据列删除值
问题描述
我有以下data.frame。我想做2个转换。
输入 :
id t1 t2 t3 t4 t5 t6 t7 t6 t8 t9
1 s s s w r r t t w s
2 s s s o o w t t o s
3 s s s o w w t t o s
4 s s s o o w t t o s
5 s s s s s s w w s s
6 s s s w t t w w w s
我想删除的第一个值出现在“第一个 w”之后:
输出:
id t1 t2 t3 t4 t5 t6 t7
1 s s s w
2 s s s o o w
3 s s s o w
4 s s s o o w
5 s s s s s s w
6 s s s w t t w
我想保存这个数据框。
在第二步中,我想将删除的部分保存到一个新的数据框中。
id t5 t6 t7 t6 t8 t9
1 r r t t w s
2 w t t o s
3 w t t o s
4 w t t o s
5 w s s
6 w w s
样本数据
df1<-structure(list(id=c(1,2,3,4,5,6), t1=c("s","s","s","s","s","s"), t2=c("s","s","s","s","s","s"),t3 = c("s","s","s","s","s","s"),
t4 = c("w","o","o","o","s","w"), t5 = c("r","o","w","o","s","t"), t6 = c("r","w","w","w","s","t"),
t7 = c("t","t","t","t","w","w"),t6 = c("t","t","t","t","w","w"), t8 = c("w","o","o","o","s","w"), t9=c("s","s","s","s","s","s")), row.names = c(NA, 6L), class = "data.frame")
df1
欢迎任何帮助
解决方案
一个循环选项apply
是循环遍历行(MARGIN = 1
),找到第一个'w'的位置(match
),replace
该位置之后的元素为空白(""
)
df2 <- df1
df2[-1] <- t(apply(df1[-1], 1, function(x)
replace(x, seq_along(x) > match('w', x), '')))
第二种情况是将条件从>
更改<=
为replace
df3 <- df1
df3[-1] <- t(apply(df1[-1], 1, function(x)
replace(x, seq_along(x) <= match('w', x), '')))
并仅选择具有至少一个非空白元素的列
df3 <- df3[c(TRUE, colSums(df3[-1] != '') > 0)]
推荐阅读
- r - R中的模拟概率谜题
- tsql - 带有 MAX() 的标量值 UDF 无法将数据返回给客户端
- python - 如何使用 Python 在 Excel 电子表格中绘制形状?
- ms-access - FROM 子句中的运行时错误 3131 语法错误 - Microsoft 访问
- python - 从 django 视图上下文字典中传递数据以响应组件
- python - 如何从python中的文本文件中删除重复的单词
- git - (已解决)尝试连接到 GitHub 时,SSH 和 HTTPS 密钥对我的 Eclipse 不起作用
- angular-universal - 禁用 NGUniversal Routes 和 bootstrap.min.css.map?
- groovy - 如何使用 @Value 注释从 cloudformation 中获取环境变量
- autocomplete - 如何在文本框中为基本的自动完成标签编码?