我将csv放入数据帧中的数据有1行,行中有50列。数据在电子表格中的排列方式如下:
“ FSEG- DFGS -THDG”,“ SGDG- SGRE -JJDF”,“ DIDC- DFGS -LEMS” ...
我如何只选择每个元素的中间部分(例如,第一个元素是“ DFGS ”,第二个元素是“ SGRE ”,等等),计算它们的中间部分事件并显示结果?
我尝试使用strsplit函数,但是无法使它适用于整个数据行。我在想可能是我需要的某种循环
答案 0 :(得分:1)
您可以执行unlist(strsplit(x, '-'))[seq(2, length(x)*3, 3)]
(假设您的数据始终采用 A-B-C 的形式)。
# E.g.
fun <- function(x) unlist(strsplit(x, '-'))[seq(2, length(x)*3, 3)]
fun(c("FSEG-DFGS-THDG", "SGDG-SGRE-JJDF", "DIDC-DFGS-LEMS"))
# [1] "DFGS" "SGRE" "DFGS"
修改
# Data frame
df <- structure(list(a = "FSEG-DFGS-THDG", b = "SGDG-SGRE-JJDF", c = "DIDC-DFGS-LEMS"),
class = "data.frame", row.names = c(NA, -1L))
fun(t(df[1,]))
# [1] "DFGS" "SGRE" "DFGS"
答案 1 :(得分:0)
首先我们创建一个函数strng()
,然后在apply()
的每一列上df
。 strsplit()
用“-”分割字符串,strng()
返回第二部分。
df = data.frame(a = "ab-bc-ca", b = "gn-bc-ca", c = "kj-ll-mn")
strng = function(x) {
strsplit(x,"-")[[1]][2]
}
# table() outputs frequency of elements in the input
table(apply(df, MARGIN = 2, FUN = strng))
# output: bc ll
2 1