R:将文本值从数据帧的单元格复制到另一个数据帧的另一个单元格

时间:2018-04-24 11:40:42

标签: r loops repeat

我真诚地为改变问题的内容道歉,但我刚刚意识到问题不在于循环(我收到了不好的结果,我最初认为循环是错误的。我真诚地为此道歉)。所以我现在正在编写实际问题:

我想将数据框的单元格的文本值传输到另一个数据框的单元格的另一个文本值中。

例如:

dataframe1:

id text
1  athens
2  greece

dataframe2:
id  wordmatch
1   NA
2   NA

我使用以下命令:

dataframe2$wordmatch[1] <- dataframe1$text[1]

但不是没有价值&#34;雅典&#34;在dataframe2 $ wordmatch [1]中我有值&#34; 1&#34;。

3 个答案:

答案 0 :(得分:2)

新答案:

这种意外行为是由于df1的text列可能是factor而不是character来验证,尝试class(df1$text)。您可以通过执行

来解决您的问题
df1$text <- as.character(df1$text)

dataframe2$wordmatch[1] <- as.character(dataframe1$text[1])

希望这有帮助。

关于循环的旧答案:

是的,这应该没问题。一个工作的例子是:

df = data.frame(nofdelet=c(2,3,4,2))

my_func <- function(i,j)
{
  print(paste0('i: ', i, ', j: ', j))
}

for(i in 1:nrow(df))
{
  for (j in 1:df$nofdelet[i])
  {
    my_func(i,j)
  }
}

输出:

[1] "i: 1, j: 1"
[1] "i: 1, j: 2"
[1] "i: 2, j: 1"
[1] "i: 2, j: 2"
[1] "i: 2, j: 3"
[1] "i: 3, j: 1"
[1] "i: 3, j: 2"
[1] "i: 3, j: 3"
[1] "i: 3, j: 4"
[1] "i: 4, j: 1"
[1] "i: 4, j: 2"

请注意,您不必初始化循环变量ij。希望这会有所帮助。

答案 1 :(得分:1)

您的代码适用于我的测试用例。

repetition <- c(1, 2, 3, 4, 5)
df <- data.frame(repetition)

for(i in 1:length(repetition)){
  for(d in 1:df$repetition[i]){
    print(i)
  }
}

在循环中使用它们之前,您无需指定id

我的示例的输出符合预期:

[1] 1
[1] 2
[1] 2
[1] 3
[1] 3
[1] 3
[1] 4
[1] 4
[1] 4
[1] 4
[1] 5
[1] 5
[1] 5
[1] 5
[1] 5

E:我刚注意到您的代码使用了for( i in 1:nrow(Sample)){。不应该是sample而是public class MainActivity extends AppCompatActivity { ConstraintLayout cl1,cl2; CheckBox chk; EditText usr,pass,nusr,nreg; Button btnReg, btnIng,btnNewReg; SharedPreferences shared; SharedPreferences.Editor editor; Set users_passwords; //create a set instance @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cl1=(ConstraintLayout)findViewById(R.id.cl1); cl2=(ConstraintLayout)findViewById(R.id.cl2); chk= (CheckBox) findViewById(R.id.chk); usr=(EditText)findViewById(R.id.editText); pass=(EditText)findViewById(R.id.editText5); nusr=(EditText)findViewById(R.id.RegNobre); nreg=(EditText)findViewById(R.id.Regpass); cl2.setVisibility(View.GONE); shared=getSharedPreferences("datos",MODE_PRIVATE); users_passwords = new HashSet(); //create a set object } public void registrar(View view) { cl1.setVisibility(View.GONE); cl2.setVisibility(View.VISIBLE); }} 吗?也许您应该在区分大小写时检查代码是否存在错误。

答案 2 :(得分:0)

我找到了答案。需要使用函数paste()

dataframe2$wordmatch[1] <- paste(dataframe1$text[1])