【问题标题】:How to shift particular row to right in R如何在R中将特定行向右移动
【发布时间】:2014-04-03 10:23:19
【问题描述】:

我尝试将 CSV 加载到 R 中。我无法修改 CSV,因为它是系统文件

这是我正在处理的几行 CSV。我想换行号。 1 在它的右边,因为列标题在 CSV 中不正确,之后我必须删除 NULL 列。

这是我的一些data.frame

    V1  V2  V3  V4  V5  V6  V7  V8  V9
1   NA  Cy1 NA  Cy2 NA  Cy3 NA  Cy4 NA
2   A1  NA  NA  NA  NA  NA  NA  NA  NA
3   A2  NA  94  NA  25  NA  11  NA  119
4   A3  NA  94  NA  25  NA  13  NA  198
5   B1  NA  94  NA  32  NA  113 NA  129
6   B2  NA  100 NA  95  NA  102 NA  12
7   B3  NA  NA  NA  NA  NA  NA  NA  NA
8   B4  NA  120 NA  14  NA  110 NA  25
9   C2  NA  119 NA  11  NA  40  NA  25
10  C3  NA  198 NA  13  NA  45  NA  32

我正在尝试实现类似的目标,

    V1  V3  V5  V7  V9
1   NA  Cy1 Cy2 Cy3 Cy4
2   A1  NA  NA  NA  NA
3   A2  94  25  11  119
4   A3  94  25  13  198
5   B1  94  32  113 129
6   B2  100 95  102 12
7   B3  NA  NA  NA  NA
8   B4  120 14  110 25
9   C2  119 11  40  25
10  C3  198 13  45  32

如您所见,我必须将data.frame 的第一行移至其right,然后删除“NA”列。

有人可以帮助我吗?提前致谢

谢谢, KC

【问题讨论】:

    标签: r csv dataframe


    【解决方案1】:

    更新:

    V1 <- c(NA, "A1", "A2")
    V2 <- c("Cy1", NA, NA)
    V3 <- c(NA, NA, 94)
    V4 <- c("Cy2", NA, NA)
    V5 <- c(NA, NA, 25)
    V6 <- c("Cy3", NA, NA)
    df <- data.frame(V1,V2,V3,V4,V5,V6)
    df
    
    cols <- c(5,3)
    
    df
    for (j in cols) {
    df[1,j] <- paste(df[1,j-1])
    }
    df
    
    for (j in cols) {
    df[ ,j-1] <- NULL
    }
    df
    

    上面的代码是一个最小的工作示例。让它运行,看看它是否做你想要的(它应该做的)。 您需要在 descending 的对象cols 中指定要保留的列(阅读:您希望将值转移到的所有列)及其编号顺序(否则删除列会搞砸)。

    (我是 Stata 人,所以对于 R 专业人士:请原谅我没有使用 apply 而不是循环。)

    【讨论】:

    • 嗨。我只使用了read.csv 函数。 A1, A2, ... 不是行名,而是单元格值。此外,Cy1, Cy2, ... 也不是列名。我想移动任何特定的行。我选择那一行。
    • @user3444971 我更新了答案,检查有用性
    • 感谢您的帮助。我得到以下错误,同时做同样的事情。 &gt; dim(y.new) [1] 42 9 &gt; &gt; cols &lt;- c(8,42) &gt; &gt; for (j in cols){ + y.new[1,j] &lt;- paste(y.new[1,j-1]) + } Error in [(*tmp*, 1, j, value = character(0)) : new columns would leave holes after existing columns In addition: Warning message: In [(*tmp*, iseq, value = "NA") : invalid factor level, NA generated &gt;
    • 抱歉我的编辑不好。我试图很好地格式化评论,但不能这样做。
    • 正如我所说,您需要在对象cols 中按降序指定要保留其编号的列。 cols &lt;- c(8, 42) 不确认该声明。旁注:如果要更改应用操作的行,则需要更改df[1,j] &lt;- paste(df[1,j-1]) 方括号中的第一个参数。但是,如果您必须对多行执行此操作,则必须在其周围环绕另一个循环以首先替换所有内容,然后在所有替换后删除 NA 列。
    猜你喜欢
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2019-11-05
    • 2020-07-10
    • 1970-01-01
    相关资源
    最近更新 更多