【发布时间】:2018-04-20 18:44:53
【问题描述】:
我正在使用 R 进行 For 循环,以获取每行的最后一个非 NA 值。我将不得不使用 For 循环。我的数据如下:
col1 col2 col3 col4
A NA NA NA
B C NA NA
D E F NA
到目前为止我尝试过的是:
for (i in 1:nrow(df)){
index <- as.numeric(max(which(!is.na(df[i,]))))
product <- df[i, .SD, .SDcols = index]
print(product )
}
那么 R 给出的结果为:
col1
1:A
col2
1:C
col3
1:F
但我真正想要的是如下表:
Product ColName
A col1
C col2
F col3
我尝试了as.data.table(df[i, .SD, .SDcols = index]) 和as.data.frame(df[i, .SD, .SDcols = index]),但它们都不起作用。
请让我知道是否有任何方法可以“切换”我的结果。任何帮助将不胜感激!
【问题讨论】:
-
那么你真的想要一个data.frame/data.table吗?或者只是打印时看起来像这样的东西?如果您最终想要一个对象,那么使用 forloop 是一个糟糕的主意。为什么你“必须”使用一个?如果这是一个家庭作业问题,那么你应该向你的老师寻求帮助。如果需要循环,他们显然会考虑一些非标准的 R 解决方案。这样的解决方案不会帮助该站点上的其他 R 用户。
-
所有列的数据类型是否相同?如果是这样转置,lapply,过滤掉NA,取最后一个条目。 ......请!不要使用 for 循环
-
@MrFlick 嗨,非常感谢您的回复。我想使用 for 循环,因为我有一个非常大的数据集。我想得到一个表格,就像我在问题中显示的那样,稍后它会链接到其他一些东西。
-
@RussHyde 非常感谢您的建议!我正在使用 for 循环,因为这是我想到的唯一方法。只是想知道你介意分享一个更详细的方法来解决这个问题吗?就像 lapply 部分。谢谢!
标签: r for-loop dataframe datatable