Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R代码使用最后一列对齐所有行的长度_R_Dataframe_Alignment_Multiple Columns_Rows - Fatal编程技术网

R代码使用最后一列对齐所有行的长度

R代码使用最后一列对齐所有行的长度,r,dataframe,alignment,multiple-columns,rows,R,Dataframe,Alignment,Multiple Columns,Rows,我有一个相当复杂和大的数据帧,我需要在R中进行数据排列。我不能想出任何可能的方法来在R中使用,所以任何帮助都将不胜感激 我的数据框架中的示例如下所示: 原始数据 现在数据必须这样完成。我想通过使用列“v8”对齐来移动所有行 需要这样做 对于NA,原始数据中有一些NA,它们都属于特定变量。 它们只能被视为价值观 有人能帮忙吗? 那将是巨大的感激 您可以使用快速脏循环来实现这一点(但根据数据集的大小,这可能效率低下) 循环的第一级遍历每一行,并检查最后一列是否包含NA值——如果是,则将所有内容滑

我有一个相当复杂和大的数据帧,我需要在R中进行数据排列。我不能想出任何可能的方法来在R中使用,所以任何帮助都将不胜感激

我的数据框架中的示例如下所示:

原始数据

现在数据必须这样完成。我想通过使用列“v8”对齐来移动所有行

需要这样做

对于NA,原始数据中有一些NA,它们都属于特定变量。 它们只能被视为价值观

有人能帮忙吗?
那将是巨大的感激

您可以使用快速脏循环来实现这一点(但根据数据集的大小,这可能效率低下)

循环的第一级遍历每一行,并检查最后一列是否包含NA值——如果是,则将所有内容滑动一次。重复此操作多次,以防数据集末尾有许多列带有NA,并且需要滑动很长的距离(使用第二级循环对数据集中的每列迭代一次;n-1次迭代就足够了)

#数据集

dat坦率地说,这不应该是一个
数据框架,而应该是一个
矩阵:在框架中,每一列表示有意义的东西,并且可能与相邻的列不同;在这幅数据图中,显示整数的绝对列似乎没有多大意义,即使相对位置(在一行内)有多大意义。我建议你转换成矩阵,不要把它当作一个框架

df您还可以执行以下操作:

library(tidyr)
library(dplyr)
library(stringr)

df <- data.frame(
  v1=c(12,NA,22,NA),
  v2=c(34,45,88,75),
  v3=c(56,78,78,NA),
  v4=c(78,NA,NA,44),
  v5=c(NA,NA,NA,NA),
  v6=c(NA,43,67,6),
  v7=c(NA,52,32,NA),
  v8=c(98,NA,NA,NA))


cols <- ncol(df)

df %>%
  unite("id") %>%
  mutate(id2 = gsub("(_NA)*$", "", id)) %>%
  mutate(del_count = cols - 1 - str_count(id2, "_")) %>%
  transmute(col = paste0(strrep("_", del_count), id2)) %>%
  separate(col, paste0("V", 1:cols), "_")

  V1 V2 V3 V4 V5 V6 V7 V8
1 12 34 56 78 NA NA NA 98
2    NA 45 78 NA NA 43 52
3    22 88 78 NA NA 67 32
4       NA 75 NA 44 NA  6
library(tidyr)
图书馆(dplyr)
图书馆(stringr)
df%
突变(id2=gsub(“(\u-NA)*$”,“”,id))%>%
突变(del_count=cols-1-str_count(id2,“)))%>%
转换(col=paste0(strrep(“,”del_count),id2))%>%
分离(列,粘贴0(“V”,1:列),“”)
V1 V2 V3 V4 V5 V6 V7 V8
112345678NA98
2 NA 45 78 NA 43 52
3 22 88 78 NA 67 32
4 NA 75 NA 44 NA 6

它为所有变量创建连接字符串,然后删除最后重复的
NA
s,然后用
'
分隔符填充,然后用分隔符拆分列。

欢迎使用StackOverflow!请阅读相关信息以及如何给出建议。这将使其他人更容易帮助您。请不要发布代码/数据/错误的图像:它无法复制或搜索(SEO),它会破坏屏幕阅读器,并且可能不适合某些移动设备。参考:(和)。请直接包括代码或数据(例如,
dput(head(x))
data.frame(…)
),谢谢,@icecreamtouctank非常感谢!!当我转换成矩阵时,它就起作用了。但是,当我想将矩阵转换回数据帧时,数据帧看起来仍然与原始数据帧一样。您是否将
t(apply(…)
的输出保存回了其他内容?R通常不会产生副作用(比如说,
data.table
包除外),因此需要将函数的输出存储到变量中(相同或新)。试试mtx干杯!!终于工作了!!是的,我只是忘记了输出函数!这不仅将数字转换为字符串(可逆),而且不再区分
NA
和空字符串。通常,最好不要在未指定的情况下将数字来回转换为字符串(或者转换为数字,您不需要这样做),因为很容易丢失(这些是int,不太可能丢失任何内容,但仍然非常低效).谢谢你的反馈-完全理解。非常感谢~~我只是使用单独和联合功能来安排我的数据。现在我可以把这些函数放在一起了!!
library(tidyr)
library(dplyr)
library(stringr)

df <- data.frame(
  v1=c(12,NA,22,NA),
  v2=c(34,45,88,75),
  v3=c(56,78,78,NA),
  v4=c(78,NA,NA,44),
  v5=c(NA,NA,NA,NA),
  v6=c(NA,43,67,6),
  v7=c(NA,52,32,NA),
  v8=c(98,NA,NA,NA))


cols <- ncol(df)

df %>%
  unite("id") %>%
  mutate(id2 = gsub("(_NA)*$", "", id)) %>%
  mutate(del_count = cols - 1 - str_count(id2, "_")) %>%
  transmute(col = paste0(strrep("_", del_count), id2)) %>%
  separate(col, paste0("V", 1:cols), "_")

  V1 V2 V3 V4 V5 V6 V7 V8
1 12 34 56 78 NA NA NA 98
2    NA 45 78 NA NA 43 52
3    22 88 78 NA NA 67 32
4       NA 75 NA 44 NA  6