【发布时间】:2018-09-25 04:52:14
【问题描述】:
假设我有一个数据表,dt1:
dt1 <- data.table(
names = c("A1", "XX", "A2", "XY", "A3", "XZ"),
A1 = c( 0, 0, 0, 0, 0, 0),
A2 = c( 0, 0, 0, 0, 0, 0),
A3 = c( 0, 0, 0, 0, 0, 0)
)
我想要这样的新数据表:
dt2 <- data.table(
names = c("A1", "XX", "A2", "XY", "A3", "XZ"),
A1 = c( 1, 0, 0, 0, 0, 0),
A2 = c( 0, 0, 1, 0, 0, 0),
A3 = c( 0, 0, 0, 0, 1, 0)
)
即如果names列的行值与某个列的名称相同,则该列的行值更改为1。
我可以通过以下代码实现:
dt1[names == "A1", "A1" := 1]
dt1[names == "A2", "A2" := 1]
dt1[names == "A3", "A3" := 1]
但我想知道是否有更简单的方法可以做到这一点,尤其是当我想要更改的列数很大时。
我尝试了以下几行,但它们不起作用:
cln <- c("A1", "A2", "A3")
dt1[names == (cln), (cln) := 1]
【问题讨论】:
标签: r data.table