在data.frame中复制每行选择变量n次

时间:2018-02-11 11:51:11

标签: r dataframe replication

我非常感谢以下数据纠缠任务的帮助。我有一个如下所示的数据框:

df <- data.frame(var1=c('a', 'b', 'c'), var2=c('d', 'e', 'f'), var3=c('h', 'j', 'k'))

我想用var1和var2固定次数复制每一行数据,比方说3次,但不是var3。在var3中代替缺失值我想要有0。

最后,我想有这个:

    df.expanded
  var1 var2 var3
1    a    d   h
2    a    d   0
3    a    d   0
4    b    e   j
5    b    e   0
6    b    e   0
7    c    f   k
8    c    f   0
9    c    f   0

2 个答案:

答案 0 :(得分:4)

这确实与链接问题密切相关,主要区别在于“var3”中的预期值。牢记这一点,以下是我将如何做到这一点:

## Expand
df.expanded <- df[rep(rownames(df), each = 3), ]

## Replace
df.expanded[["var3"]] <- as.character(df.expanded[["var3"]])
df.expanded[["var3"]][c(FALSE, TRUE, TRUE)] <- 0

## View
df.expanded
#     var1 var2 var3
# 1      a    d    h
# 1.1    a    d    0
# 1.2    a    d    0
# 2      b    e    j
# 2.1    b    e    0
# 2.2    b    e    0
# 3      c    f    k
# 3.1    c    f    0
# 3.2    c    f    0

这是使用“data.table”的可能方法:

library(data.table)
df.expanded <- as.data.table(df)[rep(sequence(nrow(df)), each = 3)][
  , var3 := replace(as.character(var3), .I %% 3 != 1, 0)][]

df.expanded
#    var1 var2 var3
# 1:    a    d    h
# 2:    a    d    0
# 3:    a    d    0
# 4:    b    e    j
# 5:    b    e    0
# 6:    b    e    0
# 7:    c    f    k
# 8:    c    f    0
# 9:    c    f    0

答案 1 :(得分:2)

您可以尝试以下代码(适合我):

{% get_available_languages as LANGUAGES %}
<ul>
  {% for lang_code, lang_name in LANGUAGES %}
    <li><a href="{% translate_url lang_code %}">{{ lang_name }}</a></li>
  {% endfor %}
</ul>

希望有所帮助

Gottavianoni