我收到了一些数据在一个相当可怕的格式,所以我希望操纵它到一个更好的格式工作.这里我的目标是将数据分割出来,并按位置顺序将其放回数据框中.例如,这里我有10个数字,然后是一个正斜杠,我希望得到这个数据框与每个列指示在原始数据中的位置,这将看起来像在问题底部的df,我只是不确定如何从版本,我已经分割我的数据为df格式.

 mydata
 "/0,2,5,6,2,5,0,0,0,0/0,0,8,1,4,,2,4,0,0/5,6,2,5,0,0,7,8,3,2\"

 mydata #step1
 [[1]]
 [1] "0"  "2"   "5"   "6"   "2"   "5"   "0"  "0"    "0"   "0"

[[2]]
 [1] "0"  "0"   "8"   "1"   "4"   "0"   "2"   "4"   "0"   "0"

[[3]]
 [1] "5"  "6"    "2"  "5"   "0"   "0"   "7"   "8"   "3"   "2"

mydf
p1  p2  p3  p4  p5  p6  p7  p8  p0  p10
0   2   5    6   2   5   0   0   0   0
0   0   8    1   4   0   2   4   0   0
5   6   2    5   0   0   7   8   3   2

对不起,这不是最好的措辞的问题,请随时做任何你想用原始数据,它不需要被分割,我只是认为这是一个很好的开始方式

推荐答案

假设mydata中的反斜杠应该是正斜杠,我们可以用新行替换正斜杠并使用read.csv.

mydata <- "/0,2,5,6,2,5,0,0,0,0/0,0,8,1,4,,2,4,0,0/5,6,2,5,0,0,7,8,3,2/"
dat <- read.csv(text = gsub("/", "\n", mydata), header = FALSE)
dat
#   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
# 1  0  2  5  6  2  5  0  0  0   0
# 2  0  0  8  1  4 NA  2  4  0   0
# 3  5  6  2  5  0  0  7  8  3   2

您在中间演示了一个0,目前是一个NA(由于mydata中的空单元格),我们可以通过以下方法轻松地解决这个问题:

dat[] <- lapply(dat, function(z) ifelse(is.na(z), 0, z))
dat
#   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
# 1  0  2  5  6  2  5  0  0  0   0
# 2  0  0  8  1  4  0  2  4  0   0
# 3  5  6  2  5  0  0  7  8  3   2

但是,如果你真的想使用strsplit,我们可以有几乎相同的效果,

out <- strsplit(mydata, "/")[[1]] |>
  strsplit(",") |>
  do.call(rbind, args = _) |>
  as.data.frame()
out
#   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
# 1  0  2  5  6  2  5  0  0  0   0
# 2  0  0  8  1  4     2  4  0   0
# 3  5  6  2  5  0  0  7  8  3   2

它现在是一个字符串框架.我们可以做一个类似的后处理(out[] <- lapply(...)),将空/null转换为0.

R相关问答推荐

导入到固定列宽的R中时出现问题

将复杂的组合列表转换为数据框架

将年度数据插入月度数据

过滤器数据.基于两列的帧行和R中的外部向量

为什么在ggplot2中添加geom_text这么慢?

使用tidy—select创建一个新的带有mutate的摘要变量

gganimate在使用shadow_mark选项时不保留所有过go 的标记

使用R闪光显示所有数据点作为默认设置

在数组索引上复制矩阵时出错

try 将 colored颜色 编码添加到ggploly的标题中

在ggplot2的框图中绘制所有级别的系数

以NA为通配符的R中的FULL_JOIN以匹配其他数据中的任何值.Frame

派生程序包| ;无法检索';return()';的正文

以不同于绘图中元素的方式对GG图图例进行排序

通过初始的shiny 应用更新部署的shiny 应用的数据和参数,其中部署的应用程序显示为URL

如何使投篮在R中保持一致

使用列名和r中的前缀 Select 列的CREATE函数

从字符串01JAN2021创建日期

R中的交叉表

如何在给定的环境中找到函数的函数参数?